求问c语言 #include <stdio.h> void fun(char *c,int d) {*c=*c+1,d=d+1; printf("%c,%c",*c,d); } main() {char b='a', a='A'; fun(&b,a);printf( "%c,%c\n" ,,b,a ); }这道题的结果为什麽是bBbA呀
2 回答
忽然笑
TA贡献1806条经验 获得超5个赞
代码是给人看的,不是给机器看的,注意格式,整成这一行算什么。。。
fun执行的时候,会把每个变量+1然后打印,所以会先打印bB
执行完后,因为fun的第一个参数是指针,而在fun函数里对指针的引用意味着会改变指针指向的变量的值。也就是说变量b的内容在执行完函数fun后,已经+1了也就是变成‘b’了。所以再打印就是bA
这个要理解c的函数调用时参数传递的过程到底发生了什么,c的函数在调用的时候,会把参数变量复制一份(说简单点是拷贝到栈中,再具体的话就有点麻烦了,自己看书吧。。。),也就是说在函数fun中,参数d虽然值会等于传入的变量a,但是它是另外一个变量了,所以操作d不会影响a;参数c是指针,它也是另外一个变量,操作c本身不会影响传入的变量,但是操作c指向的内容(*c)会改变它指向的空间,这个和&b指向的空间是一样的,所以b的内容会改变。
- 2 回答
- 0 关注
- 780 浏览
添加回答
举报
0/150
提交
取消