求问c语言 #include <stdio.h> void fun(char *c,int d)
求问c语言#include<stdio.h>voidfun(char*c,intd){*c=*c+1,d=d+1;printf("%c,%c",*c,d);}main()...
求问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呀
展开
3个回答
展开全部
代码是给人看的,不是给机器看的,注意格式,整成这一行算什么。。。
fun执行的时候,会把每个变量+1然后打印,所以会先打印bB
执行完后,因为fun的第一个参数是指针,而在fun函数里对指针的引用意味着会改变指针指向的变量的值。也就是说变量b的内容在执行完函数fun后,已经+1了也就是变成‘b’了。所以再打印就是bA
这个要理解c的函数调用时参数传递的过程到底发生了什么,c的函数在调用的时候,会把参数变量复制一份(说简单点是拷贝到栈中,再具体的话就有点麻烦了,自己看书吧。。。),也就是说在函数fun中,参数d虽然值会等于传入的变量a,但是它是另外一个变量了,所以操作d不会影响a;参数c是指针,它也是另外一个变量,操作c本身不会影响传入的变量,但是操作c指向的内容(*c)会改变它指向的空间,这个和&b指向的空间是一样的,所以b的内容会改变。
fun执行的时候,会把每个变量+1然后打印,所以会先打印bB
执行完后,因为fun的第一个参数是指针,而在fun函数里对指针的引用意味着会改变指针指向的变量的值。也就是说变量b的内容在执行完函数fun后,已经+1了也就是变成‘b’了。所以再打印就是bA
这个要理解c的函数调用时参数传递的过程到底发生了什么,c的函数在调用的时候,会把参数变量复制一份(说简单点是拷贝到栈中,再具体的话就有点麻烦了,自己看书吧。。。),也就是说在函数fun中,参数d虽然值会等于传入的变量a,但是它是另外一个变量了,所以操作d不会影响a;参数c是指针,它也是另外一个变量,操作c本身不会影响传入的变量,但是操作c指向的内容(*c)会改变它指向的空间,这个和&b指向的空间是一样的,所以b的内容会改变。
追问
恩,谢谢老师
我用手机打的,打的时侯分行了,但为什麽到页面上成这样了我也不知道,不过很谢谢你
展开全部
开始a='A',b='a'
进入fun函数后,c指针指向b,a的值传给了d,所以*c='a',d='A'
然后做加法,*c='b',d='B'
输出'bB'
退出fun函数后,因为第一个参数是指针,所以b变成了'b',因为第二个参数是值,所以a仍是'A'
再输出就是'bA'了
进入fun函数后,c指针指向b,a的值传给了d,所以*c='a',d='A'
然后做加法,*c='b',d='B'
输出'bB'
退出fun函数后,因为第一个参数是指针,所以b变成了'b',因为第二个参数是值,所以a仍是'A'
再输出就是'bA'了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a+1是b A+1是B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询