在字串這一章中,我們已經介紹過兩種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檔案回到頁頂