Kun*_*l B 2 c multidimensional-array
为什么在意外打印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
}
}
Run Code Online (Sandbox Code Playgroud)
我应该收到编译时错误,但我得到了一组地址!为什么?arr[0]在这种情况下编译器的意思是什么?
小智 8
数组类型的表达式求值为大多数上下文中指向第一个数组元素的指针(一个值得注意的例外,其中包括sizeof运算符).
在您的示例中,arr[i] 具有数组类型.所以它计算为一个类型int (*)[]的指针(一个指向数组的指针).这就是印刷品.打印指针%d是未定义的行为,因为printf()将读取指针就好像它是一个int.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |