关于c语言指针中传参不改变数据问题

在c语言里面我们有时候会出现如下情况:明明传入的形参是指针,但是在函数改变指针的指向后但是数据却不会发生改变,这个很有可能是我们忽略了在函数中我们是否使用了局部参数的地址(该地址在函数结束后再次调用其他函数时会被回收),如下:

#include <stdio.h>
#include <stdlib.h> 

typedef struct test{
	int a;
	int b;
}TEST;

void change(TEST *t)
{
//	test1是局部变量,会被回收 
	TEST *test1 = (TEST*)malloc(sizeof(TEST));
	test1->a = 100;
	test1->b = 1000;
	t = test1;
	printf("t->a=%d\n",t->a);
}

void change2(TEST *t)
{
//	无局部变量,可以改变数据 
	t->a = 100;
	t->b = 1000;
	printf("t->a=%d\n",t->a);
}

void change3(int *n){
//	a也是局部变量,会被回收 
	int a = 10;
	n = &a;
	printf("n=%d\n",*n);
} 

int main()
{
	TEST *t = (TEST*)malloc(sizeof(TEST));
	int n = 999;
	t->a = 0;
	t->b = 0;
	change(t);
//	change2(t);	
	change3(&n);
	printf("n=%d\n",n);
	printf("t->a=%d\n",t->a);
}

大家今后多留点心眼吧,别像我一样- -

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值