主函式
qooks[i].s = (char *)malloc(sizeof(char)*100);
gets(qooks[i].s);
qooks[i].qs = (char *)malloc(sizeof(char)*100);
qooks[i].num = (int *)malloc(sizeof(int));
processquerywords(qooks[i].s,qooks[i].qs,qooks[i].num);
printf("%s\n",qooks[i].qs);
函式
int processquerywords(char *s,char * qs,int * num)
本來是想通過函式processquerywords返回給主函式的num和qooks[i].qs的值都進行修改,
但是函式返回後,發現只有num的值發生了改變,qs的值卻沒有任何變化。
錯誤原因還是在於指標和函式的理解不夠透徹
c語言中函式的傳遞都是值傳遞,num的值之所以能被修改,因為傳遞的是num的位址
在函式裡面沒有對num的位址進行任何修改,只是
使num的指向的值發生了改變,對num的位址沒有任何影響。
所以函式返回後,對num進行解應用就可以得到新的值
雖然對qs的宣告是char * qs,qs指向的是乙個char型變數的位址,但是進行函式傳遞的時候,qs也就是乙個變數,只不過是乙個指向位址的變數,
函式裡面 :
修改這些變數本身
只是修改副本
出了函式,就什麼都沒發生
所以要對函式傳遞
qs的位址,對位址的指向的值進行修改,這樣函式返回後就可以得到新的值
函式傳遞的是 &qooks[i].qs 形參是 char ** qs
傳遞的是qs的位址
她的指向發生改變 *qs = ++s;
int a = 12;
int * b = &a;
int ** c = &b;
a = 12
b = &a;
*b = 12
c = &b; *c = b **c = a;
C C 語言中指向函式的指標
在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...
C C 語言中指向函式的指標
在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...
C C 語言中指向函式的指標
在c語言中,函式本身不是變數,但可以定義指向函式的指標,這種指標可以被賦值 存放於陣列之中,傳遞給函式及作為函式的返回值等 the c programming language second edition 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...