关于指针参数函数请教
void change(int *data1, int *data2){
int *temp;
//交换两数的地址
temp = data1;
data1 = data2; //修改参数1的地址
data2 = temp; //修改参数2的地址
return ;
}
int main(void)
{
int x = 25, y = 87 ;
change(&x, &y);
}
问题:
把 &x &y 带入函数 change ,*data1 =?*data2 = ?
在main()时,
x=25,
y=87,
进入change()后,
data1=&x
data2=&y
temp=data1==> temp->&x
data1=data2 ==> data1=data2->&y
data2=temp==> data2=temp->&x
所以*data1=y=87, *data2=x=25,
返回main()后,
x=25,
y=87,
因为data1和data2只是改变指针指向的地址,x,y变量还是指到原来内容,没有改变。
形参不能改变实参。 *data1= 87, *data2 =25, 因为change()函数交换了变量x,y 的地址。 没看明白你问的是啥? wistarky 发表于 2013-3-21 11:57 static/image/common/back.gif
在main()时,
x=25,
y=87,
谢谢给出这么详细的解释。
编译器在运行 chenge 函数的时候,载入的方式是 让 data1 = &x , data2 = &y , 而不是 *data1 = &x , *data2 = &y 是吧? 椒盐时代 发表于 2013-3-21 13:22 static/image/common/back.gif
谢谢给出这么详细的解释。
编译器在运行 chenge 函数的时候,载入的方式是 让 data1 = &x , data2 = &y...
没错,int*部份只是形式而已。 只是传值而已. 确切的说应该是 x/y 变量地址值的拷贝.
原 x和y 变量的地址存储的内容(x和y的值)并没有被修改. 修改的只是data1/2这两个局部指针变量的值(地址值的一份拷贝). 这两个变量会随着函数的执行完毕而销毁.
所以,,,,,,,,并不会对 x/y 的值有影响.
但如果你在change() 内执行 printf("data1 = %d, data2 = %d\n", *data1, *data2); // 你会发现值被调换了.{:lol:} monkerman 发表于 2013-3-21 14:10 static/image/common/back.gif
只是传值而已. 确切的说应该是 x/y 变量地址值的拷贝.
原 x和y 变量的地址存储的内容(x和y的值)并没有被修 ...
恩
非常感谢~ 学习一下....
页:
[1]