椒盐时代 发表于 2013-3-21 11:57:52

关于指针参数函数请教

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 = ?

wistarky 发表于 2013-3-21 11:57:53

在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变量还是指到原来内容,没有改变。

Louis_Bright 发表于 2013-3-21 12:10:06

形参不能改变实参。

jarod_wy 发表于 2013-3-21 12:13:41

*data1= 87, *data2 =25, 因为change()函数交换了变量x,y 的地址。

lcofjp 发表于 2013-3-21 12:16:00

没看明白你问的是啥?

椒盐时代 发表于 2013-3-21 13:22:26

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 是吧?

wistarky 发表于 2013-3-21 13:31:03

椒盐时代 发表于 2013-3-21 13:22 static/image/common/back.gif
谢谢给出这么详细的解释。

编译器在运行 chenge 函数的时候,载入的方式是 让 data1 = &x , data2 = &y...

没错,int*部份只是形式而已。

monkerman 发表于 2013-3-21 14:10:19

只是传值而已. 确切的说应该是 x/y 变量地址值的拷贝.
原 x和y 变量的地址存储的内容(x和y的值)并没有被修改. 修改的只是data1/2这两个局部指针变量的值(地址值的一份拷贝). 这两个变量会随着函数的执行完毕而销毁.
所以,,,,,,,,并不会对 x/y 的值有影响.
但如果你在change() 内执行 printf("data1 = %d, data2 = %d\n", *data1, *data2); // 你会发现值被调换了.{:lol:}

椒盐时代 发表于 2013-3-21 14:17:04

monkerman 发表于 2013-3-21 14:10 static/image/common/back.gif
只是传值而已. 确切的说应该是 x/y 变量地址值的拷贝.
原 x和y 变量的地址存储的内容(x和y的值)并没有被修 ...


非常感谢~

jz701209李 发表于 2013-3-21 14:31:07

学习一下....
页: [1]
查看完整版本: 关于指针参数函数请教