问各位兄弟一个问题,函数不能返回局部临时变量的地址,因为函数调用结束后这个临时变量的地址就无效了。若后续继续对其作修改会出问题。
今天在网站看关于链表的生成。该网站这么写的:
========================
//声明节点结构
typedef struct Link{
int elem;//存储整形元素
struct Link *next;//指向直接后继元素的指针
}link;
//创建链表的函数
link * initLink(){
link * p=(link*)malloc(sizeof(link));//创建一个头结点
link * temp=p;//声明一个指针指向头结点,用于遍历链表
//生成链表
for (int i=1; i<5; i++) {
//创建节点并初始化
link *a=(link*)malloc(sizeof(link));
a->elem=i;
a->next=NULL;
//建立新节点与直接前驱节点的逻辑关系
temp->next=a;
temp=temp->next;
}
return p;
}
========================
这样p不是初始化函数内部的局部指针变量么?
还有a不是在循环体内申请的临时变量吗?离开链表的初始化函数后,地址不就无效了。。
今天在网站看关于链表的生成。该网站这么写的:
========================
//声明节点结构
typedef struct Link{
int elem;//存储整形元素
struct Link *next;//指向直接后继元素的指针
}link;
//创建链表的函数
link * initLink(){
link * p=(link*)malloc(sizeof(link));//创建一个头结点
link * temp=p;//声明一个指针指向头结点,用于遍历链表
//生成链表
for (int i=1; i<5; i++) {
//创建节点并初始化
link *a=(link*)malloc(sizeof(link));
a->elem=i;
a->next=NULL;
//建立新节点与直接前驱节点的逻辑关系
temp->next=a;
temp=temp->next;
}
return p;
}
========================
这样p不是初始化函数内部的局部指针变量么?
还有a不是在循环体内申请的临时变量吗?离开链表的初始化函数后,地址不就无效了。。
射命丸文
大吃货