我只是在c中尝试数组。其中我有以下基本疑虑?
#include <stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
a[45]=28; // trying to access the random array element which is out of bound
printf("\n value at a[5] is %d",a[5]);
printf("\nvalue at a[45] is %d",a[45]);
printf("\nvalue at a[78] is %d",a[78];
return 0;
}
上述程序成功编译并产生以下输出。
value at a[5] is 1234355 // some ando address
value at a[45] is 28 // which i have assigned
value at a[78] is 0
我的问题是
i)当我访问数组元素超出绑定.whys时它没有产生任何错误?
ii)对于char数组,例如:char[10]= {'1','2','3','4','5','6','7','8','9','0'};
数组的最后一个元素将由编译器添加'\ 0'。是否与整数数组相同?如果不是为什么?
iii)是否可以重新定义阵列?
答案 0 :(得分:2)
这些不是“疑惑”,而是问题。
char foo[] = "abc";
,那么foo[3]
将添加为'\0'
,但如果您执行char foo[3] = "foo";
,那么foo[3]
是无效访问,因为数组只有三个值。最后一个值为foo[2]
,'o'
,您的初始值设定项不被编译器覆盖,因此在这种情况下foo
不是一个有效的字符串。