我是一名新的C学习者并且有一个问题。我可以同时为不同的结构指针分配内存吗?像这样:
head,next,n1=malloc(sizeof(node));
头部接下来,n1是struct类型的指针,node是struct name。这会在内存中创建3个不同的struct指针吗?
答案 0 :(得分:3)
不,你不能,你能做的就是让所有的指针指向同一个地址:
head=next=n1=malloc(sizeof(node));
同样:
n1 = malloc(sizeof(node));
next = n1;
head = next;
答案 1 :(得分:0)
此表达式语句在C
中有效head,next,n1=malloc(sizeof(node));
由三个子表达式组成,这三个子表达式是逗号运算符的操作数。
你可以想象它像
( head ), ( next ), ( n1=malloc(sizeof(node)) );
因此,您可以看到只有n1被分配了malloc
调用返回的值。
您可以改为编写
head = next = n1 = malloc(sizeof(node));
但同样在这种情况下,函数malloc被调用一次,其值被分配给三个指针n1,next和head。这就是所有三个指针都具有相同的值 - 通过一次调用malloc来分配内存的地址。
因此,如果您希望每个指针都指向自己分配的内存,那么您必须调用malloc三次。
head = malloc(sizeof(node));
next = malloc(sizeof(node));
n1 = malloc(sizeof(node));
答案 2 :(得分:0)
在C中","(逗号)运算符用于定义多个相同类型的变量。例如:
int n1, next, head;
但不能用于为变量赋值。为此,您需要使用赋值运算符" ="(相等)。例如:
head = next = n1 = malloc(sizeof(node));