【问题标题】:Using array initializing notation on heap array在堆数组上使用数组初始化符号
【发布时间】:2019-04-19 08:31:11
【问题描述】:

防止在堆内存上使用数组初始化符号 ({1,2,3...}) 背后的逻辑目的是什么?现在似乎已经将功能添加到标准中......

如果这是可能的,那岂不是很有意义:

int *list;
list = malloc(sizeof(*list)*3);
*list = {1, 2, 3}; // error

但是必须这样做:

int *list;
list = malloc(sizeof(*list)*3);
list[0] = 1;
list[1] = 2;
list[2] = 3;

我错过了什么吗?有没有简单的方法来预先安排一个数组?

【问题讨论】:

  • 有趣的问题,但如果我们知道数组的元素为什么要使用 malloc,我认为这不是好方法。
  • 问题是由于 Reasons™,C 不支持数组赋值

标签: c arrays memory


【解决方案1】:

我会使用复合文字和memcpy 来初始化。

memcpy(list,(int[]){1, 2, 3},3*sizeof(int)); // error

或者干脆没有malloc'ing。

list = (int []){1,2,3};

【讨论】:

    【解决方案2】:

    这只是语法。你发明了一个不包含在标准语言中的syntactic sugar

    他们希望 C 语言尽可能简单,这与其他语言的哲学相反,他们在内核周围添加了大量语法。

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 2015-01-05
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2021-05-10
      • 2023-04-09
      相关资源
      最近更新 更多