#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 b
A 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
调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
评论