【问题标题】:Initialize all elements of C array to an integer [duplicate]将C数组的所有元素初始化为整数[重复]
【发布时间】:2021-06-10 13:17:35
【问题描述】:

我想将整数数组的所有元素初始化为 -2。

我已经看到int A[10] = {0} 将所有 10 个元素初始化为 0 的各种答案。但是,我无法用 -2 重现它。

#include <stdio.h>

int main() {
    int A[10] = {-2};

    printf("%d",A[3]);
}

给出默认值 0 而不是 -2。

我该怎么做。关注的数组很大。

【问题讨论】:

  • 没有捷径可走。 int A[10] = {-2, -2, -2, -2, -2, -2, -2, -2, -2, -2} ... 或int A[10]; for (i = 0; i &lt; 10; i++) A[i] = -2; 您可以编写一个输出{ -2, -2, -2, ..., -2 } 的程序并使用它来初始化您的数组。类似(虽然这是无效的 C 代码)int A[1000] = #include &lt;Ainit.c&gt;;
  • 关于在编译时将大数组初始化为特定值,请参阅stackoverflow.com/a/13488596/584518
  • "我该怎么做。相关的数组大小很大。" --> 意味着存在解决更高级别问题的更好方法。
  • @alex01011 我可以用memset(&amp;A[0], -1, 10*sizeof(int)) 用0 和-1 填充它,但不适用于其他整数。我还不精通内存管理,所以也许有人可以创建一个通用代码。

标签: arrays c


【解决方案1】:

使用循环为每个元素分配所需的值。在当前典型的启用优化的计算机和编译器中,内存访问的成本应该高于循环的成本,所以只有在你真正发现循环太慢之后才应该考虑循环的成本。

#include <stdio.h>

int main() {
    int A[10];
    for (size_t i = 0; i < sizeof(A) / sizeof(*A); i++) {
        A[i] = -2;
    }

    printf("%d",A[3]);
}

【讨论】:

  • 为什么大多数答案都在谈论一种仅适用于初始化为 0 的方法。为什么它不适用于其他整数
  • 因为规范说,当给定一些元素的初始化器时,没有明确指定值的元素应该初始化为零。
猜你喜欢
  • 2015-11-11
  • 2018-03-17
  • 2019-02-17
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多