【C/C++】函数中指针的传递

本文探讨了在C/C++中,为何通过函数传递指针时,仅修改指针所指向的值而未改变指针本身。内容解释了值传递的概念,指出num的值能被修改是因为传递了其地址。同时,强调了当传递如char *qs这样的指针时,若要修改其指向的内容,需要传递指针的地址,即使用char **qs。通过示例代码阐述了指针、指针的指针如何操作及传递,以达到预期的值修改效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主函数


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;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值