函数参数传递的问题

函数参数传递的问题只需记信一点:传递的永远是参数的副本

例1:
void change(int a,int b)
{
    int temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a=10,b=20;
    printf("a=%d,b=%d\n",a,b);
    change(a,b);
    printf("a=%d,b=%d\n",a,b);

    return 0;
}


change函数中传入的是a,b的副本a',b',改变的是a',b',而a和b并没有改变
--------------------------------------------------------------------------------------------------
例2:
void change(int* a,int *b)
{
    int *temp;
    temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a=10,b=20;
    printf("a=%d,b=%d\n",a,b);
    change(&a,&b);
    printf("a=%d,b=%d\n",a,b);

    return 0;
}

change函数中传入的是指针a和指针b的副本,函数改变是指针a和指针b的副本,指针a和指针b是没有变的
------------------------------------------------------------------------------------------------
例3:
void change(int* a,int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int a=10,b=20;
    printf("a=%d,b=%d\n",a,b);
    change(&a,&b);
    printf("a=%d,b=%d\n",a,b);

    return 0;
}

例3中虽然change函数中传入的也是指针a和指针b的副本,但是在函数中通过指针副本改变了其所指向数据的值。
--------------------------------------------------------------------------------------------------
例4:
struct Node
{
	int x;
	int y;
};
void change(Node* a,Node* b)
{	
	a->x = 100;
	a->y = 100;
	b = a;
}
int main()
{
	Node a,b;
	a.x = 10;
	a.y = 10;
	b.x = 0;
	b.y = 0;
	printf("a.x=%d,a.y=%d\n",a.x,a.y);
	printf("b.x=%d,b.y=%d\n",b.x,b.y);
	change(&a,&b);
	printf("a.x=%d,a.y=%d\n",a.x,a.y);
	printf("b.x=%d,b.y=%d\n",b.x,b.y);
}

例4中change函数传入的是结构体指针a和结构体指针b后副本,但是change函数中通过对结构体指针a的副本所指向的内容做了修改,即实际的数据被修改了。而对于结构本b,在change函数的发生的是结构体指针a的副本赋值给了结构体指针b的副本,实际上结构体指针b并没有发生改变,因此最后结构体b的输出没有发生变化。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值