C语言函数问题(四)

来源:百度知道 编辑:UC知道 时间:2024/05/25 09:04:42
(45)有以下程序
point(char *p)
{
p+=3;
}
main()
{ char b[4]={'a','b','c','d'},*p=b;
point(p); printf("%c\n",*p);
}
程序运行后的输出结果是
A)a
B)b
C)c
D)d

为什么选A呢?

因为对于p来说,仍然是按照传值的方式进行传递的,并非传址,也就是说,传到point中的传是保存在p中的地址,在point中改变p并不能影响到主函数中的p,但是可以影响到p所指向的元素(即p中保存的地址里面的的值);

要想达到你希望看到的结果,应该 这样:

point(char **p)
{
*p+=3;
}
main()
{ char b[4]={'a','b','c','d'},*p=b;
point(&p); printf("%c\n",*p);
}

上楼回答的不错,函数是传值操作。只所以指针通过函数改变主函数的数据,是通过*来操作主函数的数据。