#include<iostream> void f(char *a,char *b) { a=b; (*a)++; printf("after *a++:a=%c ================= \n",*a); printf("after *a++:b=%c ================= \n",*b); } void main() { char a1='A',a2='a',*p1,*p2; p1=&a1; p2=&a2; f(p1,p2); printf("%c",a1); printf(" %c",a2); printf("\n");} 运行结果如下:b bA b原因如下:在函数f中形参a得到实参p1的值&a1,形参b得到实参p2的值&a2,而后a=b语句使得a和b同指向了a2,a和b都表示a2的地址。(*a)++将a2的值变为了b,在函数内输出的时候,*a和*b都表示a2的值,所以输出b b 在主函数中的时候,p1,p2属于单值传递,p1 p2的值不能在函数结束后改变,只能进行实参向形参传数据,形参的值无法传回给实参。所以p1 p2在函数调用后指向依然分别是 a1 a2a1 为A a2在函数中改变了,所以输出A b 调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。

评论