在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/

10-11 22:13
查看更多