#include<stdio.h>
void point(char *p)
{
p+=3;
}
void f(char *x,char *y)
{
char t;
t=*x;*x=*y;*y=t;
}
main()
{
int i;
char b[4]={'a','b','c','d'},*p=b,*q;
point(p);
printf("%c\n",*p);
q=&b[3];
while(p<q)
{
f(p,q);
p++;q--;
}
for(i=0;i<4;i++)
printf("%c",b[i]);
}这个的结果为a回车dcba
为什么第一个的形参没有改变实参,而第二个改变了???
是不是说第一个子函数改变的是形参变量的地址所以不会改变实参,而第二个形参改变的是地址值所以说会改变实参呢?
追答这里的实参都是指针,没有涉及改变。改变的是指针指向的具体数值。
第一个函数point中的p仅仅从最开始0x11变到0x14,由指向第一个元素变成指向第四个元素,但它没修改任何元素数值。而后面的函数f真正修改了地址上的内容。
两个不都是用的指针吗?