自己的定义的变量在void函数中被分配内存单元,但在函数结束后内存单元会被收回,存储的数据也就不复存在。若要对传入的参数进行改变,需要使用一个对应的指针来指向它做修改。
定义一个int型数据做比较:
#include<stdio.h>
#include <stdlib.h>
void change1(int* p)
{
*p=2;
}
void change2(int p)
{
p=2;
}
int main()
{
int a=10;
int b=10;
change1(&a);
change2(b);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
结果a被修改了,b没有变。
同样的,在链表、二叉树初始化或者插入操作时,常常会因为它结构本身是一个指针而忘了用指针来指向它,还要注意传入的应是个地址。
typedef char element;
typedef struct tree *bt;
struct tree
{
element data;
bt left;
bt right;
};
void creat(bt *b) //修改头结点所以用指针指针
{
char c;
scanf("%c",&c);
if(' '==c )
{
(*b)=NULL;
}
else
{
(*b)=(bt)malloc(sizeof(struct tree));
(*b)->data=c;
creat(&((*b)->left));
creat(&((*b)->right));
}
}