主函数
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)
{
int i;
* num = *s++ - '0';//改变的是num的数据 地址并没有发生改变
++s;
qs = ++s;
printf("%s\n",*qs);
return 0;
}
本来是想通过函数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;