【发布时间】:2012-09-19 04:31:56
【问题描述】:
我知道使用负索引只是运气。但出于好奇,我尝试了这个。我知道你可以声明 array[0];就像 malloc(0);是合法的。但是我怎么能在数组[0]中存储一个值呢?
#include <stdio.h>
#include <conio.h>
int main(void)
{
int i;
int array[0];
array[0] = 5;
printf("%d\n",array[0]);
getch();
}
【问题讨论】:
-
我认为,你不能在那个数组中存储值
-
你也可以写
array[1] = 5,值会被存储。只是你正在写入一个不是为你保留的内存位置。 -
访问负索引不是纯粹的运气,可以通过指针来实现。
-
如果您只是调试代码并跟踪您的内存,您的所有这些实验都可以很好地清除。 Visual Studio 在这些方面提供了很多选项。您可以监视您的变量、它们访问的寄存器以及它们写入的内存。无论如何,很好的实验;-)
-
你能想到多少种不同的方法来使用超出范围的索引,并被告知结果是未定义的行为,因为索引超出了范围,然后再次询问不同的方法超出范围的索引? ;-) 当然,在这个例子中,你引入了一个新的转折点,即数组定义是非法的,但即使它是合法的你也会越界访问它。
标签: c arrays indexing semantics