我有以下代码:
void generate_random_array(int8_t array[], int array_size){
srand(time(NULL));
for(int i = 0; i < array_size + 1; i++){
array[i] = rand() % 21 + (-10);
printf("%d, %d\n", array[i], i);
}
}
int main(){
int8_t some_array[100];
generate_random_array(some_array, 100);
for(int i = 0; i < 101; i++){
printf("%d %d\n", some_array[i], i);
}
return 0;
}
程序生成给定数组的随机元素,范围从-10到10,然后显示它们。问题是当我第二次打印元素时,数组的最后一个元素变为100。我想知道原因。
答案 0 :(得分:3)
数组的索引从零开始。
int array[3];// an int array with 3 elements
array[0]; //first element
array[1]; //second element
array[2]; //third element
array[3]; //undefined because it is beyond the end of the array
答案 1 :(得分:1)
在您的函数generate_random_array
中,您正在迭代i
至array_size + 1
。并且您声明了一个大小为100
的数组; int8_t some_array[100];
操作系统将为您保留100*sizeof(int8_t)
字节内存。
你的数组的索引将位于[0,100]范围内,即。排除100th
位置。
现在,您正在做的是修改声明中未声明的some_array[100]
。它是可能的,因为C
不会进行任何越界访问检查。
但需要注意的一点是,您正在尝试修改/读取无人认领的内存。所以这是不确定的行为。有时您可能会获得100
以外的其他值。
但是简而言之,这种行为尚未确定,因为您正在访问数组的越界索引。