【发布时间】:2016-11-27 21:40:17
【问题描述】:
我想用常量值初始化一个 int 数组,所有 2^n 值从 2^0 到 2^31,我想知道下面哪种方法是正确的,它是否给出了我想要的结果以及是否有是更简单或更短的方法来初始化它。
static const char two_n[32];
two_n[32] = {1, 2 ,4 ,8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
8192, 16384, 32768, 65535, 131070, 262140, 524280, 1048560,
2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
268435456, 536870912, 1073741824, 2147483648};
或
static const char *two_n[32];
two_n[32] = {1, 2 ,4 ,8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
8192, 16384, 32768, 65535, 131070, 262140, 524280, 1048560,
2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
268435456, 536870912, 1073741824, 2147483648};
或
static const int two_n[32];
two_n[32] = {1, 2 ,4 ,8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
8192, 16384, 32768, 65535, 131070, 262140, 524280, 1048560,
2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
268435456, 536870912, 1073741824, 2147483648};
【问题讨论】:
-
这些都不行。您是否只是尝试了代码并查看了结果?你需要回顾一下你对数组的理解。试试更简单的。
-
65535 以及之后的几个错误。最好在程序启动时使用简单的
for循环填充数组。或者您可以对常量使用十六进制表示法,因为十六进制值遵循一个很好的明显模式。 -
感谢 cmets,我在一所 it 学校,第一年禁止使用 for 循环,我不能使用十六进制,因为我需要做一个使用 Radix 对数字进行排序的程序,我将数字转换为二进制基数,然后使用升序进行排序。
-
2 的幂的值由下式给出: static const int two_n[32] = { 1
-
注意:
const数组声明后,不能赋值。 (否则不会是const。)
标签: c arrays static int constants