gpt4 book ai didi

c - 在 C 中分配一个 int 数组,但得到一个额外的 int 32767

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:40 25 4
gpt4 key购买 nike

我在 C 中有以下代码:

int main(){
int array[] = {1,2,3,3,4,5,6,7,8};
printf("%d\n", array[8]);
printf("%d\n", array[9]);
}

当我执行它时,我得到的结果是 8 和 32767。我很困惑为什么。


更新

对 3,3 的事情感到抱歉。真正让我困惑的是数字 32767,如果它是未定义的行为,为什么它总是 32767?而且我发现了一个奇怪的事情:

int main(){
int arrayB[] = {7,4,3,4,1};
for(int i = 0; *(arrayB+i); i++){
printf("%d\n",*(arrayB+i) );
}

我写了这个,32767这个数字又出现了。并且令人毛骨悚然的部分是,如果我将数组更改为任何其他长度(删除或添加数字),它工作得很好!!!

最佳答案

你得到了未定义的行为。

您不能打印 9 元素数组的第 10 个元素,那不是有效代码。

对于 array[8],您只会得到 8,因为您在初始化列表中有两次 3

你的数组在内存中看起来像这样:

       +---+---+---+---+---+---+---+---+---+
index: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
+---+---+---+---+---+---+---+---+---+
data: | 1 | 2 | 3 | 3 | 4 | 5 | 6 | 7 | 8 |
+---+---+---+---+---+---+---+---+---+

因此,您可以看到 array[8] 中的数据实际上是 8,但这是数组中的最后一个元素。如果您使用大于 8 的索引进行索引,则会出现未定义的行为。

关于c - 在 C 中分配一个 int 数组,但得到一个额外的 int 32767,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com