【发布时间】:2023-03-16 08:10:02
【问题描述】:
我创建了一个 3d 数组
a[2][3][2]
现在当我尝试打印时
printf("%d",a[1] - a[0]);
我得到 3 作为输出。
我的理解是 a[1] 给了我 a[1][0][0] 元素的地址,a[0] 给了我 a[0][0][0] 的地址。
设 a[0][0][0] 的地址为 BA,则 a[1][0][0] 的地址为 BA + 4*2*3 其中 4 字节是整数数据类型的内存空间
我期望结果是 6。
我也试过了
printf("%d",(&a + 1) - &a);
收到的输出是 1。
我哪里错了?
编辑 1:整个代码
#include<stdio.h>
int main(){
int a[2][3][2] = {{{1,2},{3,4},{5,6}},{{7,8},{9,10},{11,12}}};
printf("%d",a[1]-a[0]);
return 0;
}
【问题讨论】:
-
printf("%d",a[1] - a[0]);---->printf("%p", (void *)(a[1] - a[0])); -
提供完整的代码,你会做什么?
-
a[1]给你一个指向a[1][0]的指针,现在它与a[1][0][0]具有相同的地址,但它的类型是pointer to array of 2 xxx。 -
@LPs - 这是错误的。指针减法的结果(这是你在所有衰减之后得到的)是一个 ptrdiff_t,而不是另一个指针。