gpt4 book ai didi

c - 局部数组和数组索引变量如何存在于内存中?

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

我在面试问题中遇到了第一个问题。但我想要对这个问题进行适当的解释。我在家里尝试这个,其他一些困惑也随之增加。

#include <stdio.h>
int main()
{
int arr[4]={10,20,30,40};
int i;
for(i=0;i<=4;i++)
printf("%d,",arr[i]);
printf("\n");
return 0;
}

OUTPUT
10,20,30,40,4,

最后一个输出是 4。但它超出了数组索引。我再次认为在内存变量中我出现在数组元素之后。所以我得到了这个答案。

但是我又把这个搞混了

 #include <stdio.h>

int main()
{
char arr[4]={10,20,30,40};
int i;
for(i=0;i<=4;i++)
printf("%d,",arr[i]);
printf("\n");
return 0;
}
OUTPUT
10,20,30,40,0,

再次与下面混淆

#include <stdio.h>
int main()
{
int arr[4]={10,20,30,40};
char i;
for(i=0;i<=4;i++)
printf("%d,",arr[i]);
printf("\n");
return 0;
}

OUTPUT
10,20,30,40,74743796,

谁能解释为什么输出会出现这种类型的变化?

我用的是intel cpu,Ubuntu os,Gcc complier..

如果特定于编译器或特定于体系结构,那么也请在答案中提及。

最佳答案

这叫做 Undefined Behavior .由于您正在访问其范围之外的数组,任何事情都可能发生,结果不必(也不会)有意义。

关于c - 局部数组和数组索引变量如何存在于内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11840948/

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