为什么调用函数point(p)的传递方式是(传值)而不是(传地址)啊??

来源:百度知道 编辑:UC知道 时间:2024/05/27 01:12:54
point(char *p){p+=3;}
main()
{char b[4]={'a','b','c','d'},*p=b;
point(p);
printf("%c\n",*p);
}
为什么调用函数point(p)的传递方式是(传值)而不是(传地址)啊??

显然是传地址!!!!
p=b。代表数组首地址!!!

*p=b。此时的*只是一个说明符
相当于
char *p;
p=b;

但是楼主请注意。我补充一下!!

因你的p指向b,所以一直是指向数组b的首地址的。
而你在调用函数里的p只是形参指针。也就是我把他换成q,也一样
他们两个都同时指向b。但是形参指针改变了。。。跟p没有关系···p还是指向首地址。。也就是a。
楼主要还不清楚hi我。

楼主改成这样再去运行一下看看
point(char *q){q+=3;printf("%c\n",*q);}
main()
{char b[4]={'a','b','c','d'},*p=b;
point(p);
printf("%c\n",*p);
这是d a
最后一补充
point(char *q){*q+=3;printf("%c\n",*q);}//楼主看这个*号
main()
{char b[4]={'a','b','c','d'},*p=b;
point(p);
printf("%c\n",*p);

这是d d
关键就是有没有星号的问题了
没有*号的话,表示改变的是形参指针变量,所以和原来指针变量不影响,也没有改变值。
当有*号的时候。表示改变了形参指针指向的值。。也就是b。因为p也是指向b的。所以b改变了p也改变了···

其实是传递地址的

原本p指向数组b的首地址-------------------->即指向'a'
point(p);----------------------------->调用函数point(char