在c语言中,这样的代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int item;
struct node* next;
}Node;
Node * newNode(int i)
{
Node *x=malloc(sizeof(Node));
x->item=i;x->next=NULL;
return x;
}
int main()
{
int a=2;
Node *p=newNode(a);
printf("%d\n",p->item);
return 0;
}
函数newNode(int)结束后,指针x被释放,指针p得到一个垃圾地址。但是结果是2。请解释这个过程。谢谢。
最佳答案
在函数newNode()
指针x
未释放后,因为您从未使用过free(x)
,因此指针仍然有效!
return x;
这里的x值是
Node
结构存在的内存位置的地址。Node *p=newNode(a);
这里,指针类型的变量p(意味着它的值是一个地址)将等于
newNode()
返回的值,因此它将指向x
函数内部指向的同一项。关于c - 为什么局部变量可以是函数的返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22239924/