18. 高階指標應用 - About Jun Wu - 國立屏東大學

文章推薦指數: 80 %
投票人數:10人

在字串這一章中,我們已經介紹過兩種C語言的字串:字串陣列與字串指標,請參考下面的程式:. #include #include int main() { char ... 跳至內容 JunWu的教學網頁國立屏東大學資訊工程學系CSIE,NPTU 使用者工具 登入 網站工具 搜尋 工具輸出PDF檔案多媒體管理器網站地圖登入> 多媒體管理器網站地圖 足跡:•advancedpoint c:advancedpoint 目錄表 18.高階指標應用 18.1指標與字串 18.2動態配置字串 18.3字串操作函式之實作 計算字串長度 字串串接 trim 18.4動態陣列 18.5動態結構體 18.6函式指標 18.7結構體的彈性陣列成員 國立屏東大學資訊工程學系程式設計(二) 18.高階指標應用 18.1指標與字串 在字串這一章中,我們已經介紹過兩種C語言的字串:字串陣列與字串指標,請參考下面的程式: #include #include   intmain() { charstr[]="Hello"; char*p; inti;   printf("strat%p\n",str);   for(i=0;i #include   intmain() { charstr[]="Hello"; char*p;   p=str;   p[0]='H'; *(str+3)='L';   puts(str); puts(p);   return0; } 18.2動態配置字串 我們也可以使用「malloc()函式」或「calloc()函式」來動態地在記憶體中配置字串所需的空間,例如: #defineLEN10;   char*str=malloc((LEN+1)*sizeof(char)); 或是 char*str=malloc(LEN+1); 但是要特別注意的是,這種動態配置的字串,從其配置開始至程式結束,都會一直存在記憶體中,除非我們以「free()函式」將之釋放。

為了在程式執行時,不要過度佔用記憶體,當我們不再需要該字串時,應該以下列程式碼將其釋放: free(str); 如果要動態地宣告由多個字串所組成的陣列,又該如何做呢?請參考下面的例子: #include #include #include   #definenumString10 #defineLEN20   intmain() { char*strs[numString]; inti;   for(i=0;i #include #include   #definenumString10 #defineLEN20   intmain() { char**strs; inti;   strs=malloc(numString*sizeof(void*)); for(i=0;i #include   intmain() { int*data; intsize,i;   printf("ArraySize=?"); scanf("%d",&size);   data=malloc(size*sizeof(int));   for(i=0;i #include   intmain() { int**data; intRow,Col; inti,j;   Row=3; Col=2;   data=malloc(sizeof(int*)*Row); for(i=0;i #include   typedefstruct { intx; inty; }Point;   voidshowPoint(Pointp) { printf("(%d,%d)\n",p.x,p.y); }   intmain() { Point*p1=malloc(sizeof(Point)); p1->x=5; p1->y=10; showPoint(*p1); return0; } 我們也可以產生一個動態的陣列用以存放多個結構體: #include #include   typedefstruct { intx; inty; }Point;   voidshowPoint(Pointp) { printf("(%d,%d)\n",p.x,p.y); }   #defineLEN10   intmain() { Point*ps=malloc(sizeof(Point)*LEN); inti;   for(i=0;i #include   intmaximum(intd[],intn) { intmax=d[0]; inti;   for(i=1;id[i]) min=d[i]; returnmin; }   intmedian(intd[],intn) { doubleaverage=0.0; inti,med; doubletemp;   for(i=0;iabs(d[i]-average)) med=d[i];   returnmed; }   intfindANumber(int(*func)(intd[],ints),intdata[],intsize) { return(*func)(data,size); }     intmain() { intdata[10]={113,345,23,75,923,634,632,134,232,98}; intnum;   num=findANumber(maximum,data,10); printf("Themaximumis%d.\n",num); num=findANumber(minimum,data,10); printf("Theminimumis%d.\n",num); num=findANumber(median,data,10); printf("Themedianis%d.\n",num);   return0; } 我們也可以延伸此做法,設計宣告一個指向多個函式的指標陣列: void(*funcs[])(void)={insert,delete,update};   ...   (*funcs[i])();//呼叫第i個函式 18.7結構體的彈性陣列成員 C99開始提供一個新的功能,允許我們為結構體設計彈性的陣列成員(FlexibleArrayMember),也就是未定義大小的陣列,但必須為所有成員的最後一個,且只能有一個。

請參考下面的程式: #include #include   structvstring { intlen; charchars[]; //char*chars; };     intmain() { structvstring*str=malloc(sizeof(structvstring)+10); str->len=10;   return0; } c/advancedpoint.txt·上一次變更:2019/07/0215:01(外部編輯) 頁面工具 輸出PDF檔案回到頁頂



請為這篇文章評分?