我可以同时为不同的结构指针分配内存吗?

时间:2016-06-15 00:39:14

标签: c pointers variable-assignment

我是一名新的C学习者并且有一个问题。我可以同时为不同的结构指针分配内存吗?像这样:

head,next,n1=malloc(sizeof(node));

头部接下来,n1是struct类型的指针,node是struct name。这会在内存中创建3个不同的struct指针吗?

3 个答案:

答案 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));