为什么没有在意外打印2D数组的一个维度时出现编译时错误?此代码为什么打印地址?
#include <stdio.h>
void main() {
int i;
int arr[2][3] = { 1, 2, 3, 4, 5, 6 }; //<- Declared a 2D array
for (i = 0; i < 6; i++) {
printf("%d\n", arr[i]); // <- Accidently forgot a dimension
}
}
我应该收到编译时错误,但我得到了一组地址!为什么?在编译器的情况下,arr[0]
是什么意思?
因为* array *类型(这是'arr [i]'的类型)*衰减*到指针。 –
它应该会产生警告(类型为int *'的错误格式说明符'%d'),如果启用的话。 http://coliru.stacked-crooked.com/a/8d995ce5a6a38cb2 – tkausl
从技术上讲,输出是未定义的行为,因为'%d'不能用于指针。 –