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()或其他方法和链表澄清关于动态内存分配的概念。