在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
答案 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。