【问题标题】:Can i assign memory to different struct pointer at same time? [duplicate]我可以同时将内存分配给不同的结构指针吗? [复制]
【发布时间】:2016-06-15 00:39:14
【问题描述】:

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

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

Head next 和 n1 是 struct 类型的指针,node 是 struct 名称。这会在内存中创建 3 个不同的结构指针吗?

【问题讨论】:

  • 实际上,只是为了澄清。您希望所有三个变量都指向相同的内存还是不同的内存?上面的链接显示了如何为前者做到这一点。
  • 不同的内存位置
  • 好的,那么答案是否定的,这在 C 语法中是不可能的。需要多个单独的分配与相应的malloc 调用。
  • 赋值一​​般不会创建变量。
  • 谢谢凯勒姆! @Olaf Yess 变量需要在分配内存之前先声明。

标签: c pointers variable-assignment


【解决方案1】:

不,你不能,你可以做的是让所有的指针指向同一个地址:

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

同:

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

【讨论】:

    【解决方案2】:

    这个在 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));
    

    【讨论】:

      【解决方案3】:

      在 C 中,“,”(逗号)运算符用于定义多个相同类型的变量。例如:

      int n1, next, head;
      

      但不能用于给变量赋值。为此,您需要使用分配运算符“=”(等于)。例如:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-15
        • 2018-11-24
        • 2018-05-26
        • 1970-01-01
        • 2020-03-29
        • 2019-03-18
        相关资源
        最近更新 更多