在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);
}
大家今后多留点心眼吧,别像我一样- -