Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用指针将内存分配给结构_C_List_Struct - Fatal编程技术网

C 使用指针将内存分配给结构

C 使用指针将内存分配给结构,c,list,struct,C,List,Struct,我有以下链接列表: struct node { int d; struct node *next; }; int main() { struct node *l = 0; struct node *k = l; k = malloc(sizeof(struct node)); /* l->d = 8; */ return 0; } 为什么注释代码使用错误?我不明白为什么没有为“l”指向的节点分配内存,因为k指向与l相同的节点

我有以下链接列表:

struct node {
    int d;
    struct node *next;   
};

int main()
{
    struct node *l = 0;
    struct node *k = l;
    k = malloc(sizeof(struct node));
    /* l->d = 8; */
    return 0;
}

为什么注释代码使用错误?我不明白为什么没有为“l”指向的节点分配内存,因为
k
指向与
l
相同的节点,我使用
k
-指针为其分配内存。

让我们把它拆开。看看评论

struct node{
    int d;
    struct node * next;   
};

int main(){
    struct node * l = 0;     // Now l = 0 (or NULL)
    struct node * k = l;     // Now k=l=0
    k = malloc(sizeof(struct node));   // Now k=<some address allocated>
    /*
    l->d = 8;                          // But l is still 0
    */
    return 0;
}
struct节点{
int d;
结构节点*下一步;
};
int main(){
结构节点*l=0;//现在l=0(或NULL)
结构节点*k=l;//现在k=l=0
k=malloc(sizeof(struct node));//现在是k=
/*
l->d=8;//但l仍然是0
*/
返回0;
}

因此,注释代码试图取消对空指针的引用。

我不明白的是:k和l指针不是都是吗?因此,如果两者都指向同一位置,那么更改k或将内存分配到同一位置不会导致l指向具有已分配内存的同一位置吗?首先,
k
l
都是变量。如果您给他们赋值,他们将保留该值,除非您直接或通过取消引用指向他们的指针(而不是具有相同值的指针)重新赋值。@Eugene_Sh.我理解是否正确:struct node*l是变量,struct node*pl是指向结构节点的指针,而int*p;是指向int的指针吗?
l
pl
都具有相同的类型,即指向
节点的指针
p
是指向
int
的指针。但是
指向
的指针本身就是一种类型,因此使用
指向
的指针类型的标识符使其成为该类型的变量。您的概念似乎不清楚,我建议您观看一些视频讲座,并使用malloc()或其他方法和链表澄清关于动态内存分配的概念。