【发布时间】:2014-07-25 21:25:49
【问题描述】:
int x = 750;
int i = 0;
while (pow(2, i) < x) {
i++;
}
printf("i is currently %d\n", i);
int array[i];
while (i > 0){
i--;
printf("The value of array %d is %d\n", i, array[i]);
}
当我这样做时,它创造了一些非常疯狂的价值。我听说过尝试使用 malloc 或 memset,但值没有改变。我要做的就是将所有这些设置为零,以便我可以将其用作计数器。谢谢!
【问题讨论】:
-
什么,确切地,当值“没有改变”时,
memset您尝试看起来像吗?请张贴那个。我的水晶球告诉我你调用了memset(array, 0, i),你应该调用memset(array, 0, i*sizeof(*array));。 -
嘿,谢谢 Craig,这是真的,我什至没有意识到。我需要修改它。好的,我也尝试了
memset(array, 1, i*sizeof(*array));,它显示所有值为 16843009 -
你想要它们一还是零?记住,
memset设置 octets;不是实体。将 4 字节整数序列中的每个 byte 设置为 1 会为每个int提供 0x01010101 ,转换为十进制是 16843009。如果您希望它们全部为初始值1你需要通过硬循环来完成。for (int j=0; j<i; array[j++] = 1);或类似的东西。 -
最后的 for 循环正是我所需要的。我没有意识到我可以把
array[j++]贴在柜台上。非常感谢,这非常有帮助! -
只要你解决了这个问题,你也可以解决你计算 i 的昂贵方式。试试
while ((1 << i++) < x);。如果 x 是1,您拥有的版本将允许i将循环转义为零。那将是bad,因为它会导致一个无用的VLA。对于这一切,我也会鼓励unsigned int。
标签: c initialization variable-length-array