指针题目

来源:百度知道 编辑:UC知道 时间:2024/05/28 18:08:59
void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}
请问输出是什么?具体解释一下, 谢谢!
具体解释一下a=b,是将b的地址赋于a?

void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}

首先,p1代表的是c1所在的地址,也就是'A'所在的地址; p2代表的是c2所在的地址,也就是'a'所在的地址。fun(p1,p2)是调用这个函数,结合参数p1和p2分析可知a=b是说把b(p2)也就'a'所在地址送给a(p1),此时a(p1)的内容就是'a'所在的地址。(*a)++;这句的意思是把a(p1)的内容(a)自加1(结果为b)。整个过程c1的内容'A'没有变化,所以输出为Ab。

void fun(char *a, char *b)
{ a=b; (*a)++; }
main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf("%c%c\n",c1,c2);
}

首先要确定, 在fun函数中a,b是p1,p2的拷贝,所以b=a,并不会改变p1,p2的值,然后(*a)++,由于此时a已经被b赋值,所以改变的是b中的值,即p2指针中的变量值,所以p2中变量变为b,而p1中变量值不变,

a,b 是指针值,a=b,是将b的值赋给a ,不是b的地址,

Ab
因为在函数中加的不是指针本身,而是字符!
p1=p2,故*p1代表的还是字符‘a’!!加1以后就变成了‘b’!!!

fun(p1,p2);把c1,c2的地址做实参,在fun函数中,a,b是c1,c2地址的副本,a=b;只是把副本地址进行赋值,并没有改变实参的内容。(*a)++;由于a的地址是指向C2