C语言访问二维数组未指定列索引的返回结果疑问
问题解答
首先明确C语言中二维数组的本质:你定义的int A[3][2]是「元素为int[2]类型数组」的数组,A[1]就是该数组的第2个元素,类型为int[2](长度为2的整型数组)。
在C语言的大多数表达式场景中,数组名会隐式转换为指向首元素的指针,因此直接使用A[1]时,它会被自动转换为int*类型的指针,指向A[1][0](也就是值为5的元素)的内存地址。具体打印结果分两种情况:
- 如果你用指针格式符
%p打印:操作完全合法,输出的是A[1][0]对应的十六进制内存地址,既不是垃圾值,也不存在逻辑错误。 - 如果你误用整型格式符
%d等打印:属于类型不匹配的未定义行为,输出的是内存地址被强制解释为整型的数值,不是常规意义上“未初始化内存”的垃圾值,但属于逻辑错误——你拿到的不是任何数组元素的值,完全不符合使用预期。
如果你希望打印A[1]对应的数组元素,不能直接打印数组名本身,需要通过下标访问A[1][0]/A[1][1],或者对指针解引用*A[1]/*(A[1]+1)才能拿到具体的元素值。
内容的提问来源于stack exchange,提问作者Terry Tan
相关产品推荐
相关产品推荐

