C C 函式中指標的傳遞

2021-09-30 09:41:03 字數 1136 閱讀 4021

主函式

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 下面給出幾個簡單的例子來說明指向函式的指標。第乙個例子說明指向函式的指標如何說明 賦值 呼叫...