C语言用指针作函数参数

来源:百度知道 编辑:UC知道 时间:2024/09/22 16:48:50
有以下程序:
void fun(char *c,int d)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{char a='A',b='a';
fun(&b,a);printf("%c,%c\n",a,b);
}
程序运行的输出结果是()
A.B,a,B,a B.a,B,a,B C.A,b,A,b D.b,B,A,b
请讲解一下。

选D
因为第一个参数是地址传递,fun(&b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。

答案;D
考察参数的传递,变量的作用域
fun(&b,a);
fun(char *c,int d)
b的地址传递给c,*c访问的内容,a传递给d,d访问的是a的一个副本,不影响a的内容

指针作函数参数传递的是地址,所以主函数中的变量b与函数中的指针变量c中的地址是相同的,函数中c所指向地址的值改变也就改变了主函数中b的值
值传递在函数中的运行不会影响主函数中变量的值

void fun(char *c,int d) \\无返回值函数fun
{*c=*c+1;d=d+1; \\把c地址中的值+1送入c地址中,把d的值+1送入d中
printf("%c,%c,",*c,d); \\以字符的形式打印c,d的值
}
main()
{char a=’A’,b=’a’; \\对主函数中a,b赋初值
fun(&b,a);printf("%c,%c\n",a,b); \\调用函数fun,把实参b的地址,a的值送
入函数fun中,再打印a,b的值
}

所以结果应该是b,B A,a

因为实际传递的是变量b的地址和变量a的值,所以这个调用函数还是使用的传值法传递实元的值,而传值法中哑实的传递不能修改实元的值,所以输出结果应该是b,B A,a,我不知道为什么没有这个答案

上面是我的想法,有什么不对的地方请楼下的兄弟尽量指出

呵呵,挺简单的,但如果我回答就晚啦,一定不会被采纳

真没意思。你拿本书翻翻就知道了。不用悬赏40分的