当我们使用array [i,j]访问c中的元素时会发生什么?

时间:2018-09-18 03:54:04

标签: c arrays pointers gcc

在C中,要访问二维数组,我们使用格式array [i] [j]。但是,当我不小心键入array [i,j]时,它仍会编译并返回一个小的整数值(对于i = 5和j = 7为35,对于i = 5和j = 8为0)。 我知道对于二维数组,使用单个[i]将返回ith元素的地址,但是即使对于具有GB RAM的现代系统,该地址值也可以这么小吗?另外,GCC如何编译和解释[i,j]? 我在Windows 10 64位系统上使用带有Cygwin终端的GCC。 这是声明:

XlsxOptions.PreserveMakeCopy

1 个答案:

答案 0 :(得分:1)

  

当我们使用array [i,j]访问c中的元素时会发生什么?

评估

i,然后忽略其结果值。 j被评估并用于索引array[]。很像:

// printf("\n With maximum weight : %d", table[no_of_items , w]);

(void) no_of_items;
printf("\n With maximum weight : %d", table[w]);
,中使用的

no_of_items , w逗号运算符@Shawn


如果table[]是2D数组,则table[w]中的printf()将产生一个指针。启用良好的编译器将发出警告。也许用

  

警告:格式'%d'期望类型为'int'的参数,但是参数2的类型为'int *'[-Wformat =]

int table[5][7];
int i = 2;
int j = 3;
printf("\n With maximum weight : %d", table[i,j]);

  

GCC如何编译

使用不匹配的说明符和参数是未定义的行为(UB)。编译器假定编码人员知道他们在做什么。省时间。启用所有警告。

  

地址值可以这么小吗

可以,但不相关,因为不匹配是UB。打印的内容可能是指针为int,指针的一部分为int,与指针(电话号码8675309)无关。它是UB。

相关问题