【发布时间】:2017-02-18 07:42:17
【问题描述】:
我对增加数组的指针然后测量指针位置的字节差异感到困惑。
我知道指针*p 在移动多维数组时会增加数据类型的大小。但是,当使用数组时,thisArray:
int thisArray[ 7 ][ 4 ];
应该如何评估thisArrray + 1?我是否同时增加行和列?
我想知道这些指针在内存中的间隔是多少字节。
我知道确切的答案将取决于平台。我正在寻找解决方法,而不是确切的答案。
由于我无法在 cmets 中格式化代码:我将其放在这里:
// 使用 sizeof
#include <stdio.h>
int main(void) {
int tbl[ 7 ][ 4 ];
// Size of tbl
int x = sizeof(*tbl);
printf ( "%d\n" , x);
// Size of tbl + 1;
int y = sizeof(*tbl+1);
printf( "%d\n", y);
//Size apart in bytes
int z = y - x;
printf("%d\n", z);
return 0;
}
【问题讨论】:
-
标题中问题的实际答案是
sizeof(*thisArray)。 -
@Dolda2000 这看起来是正确的;编译器提供此错误:q1.c:12:20: 警告:指针操作上的 sizeof 将返回大小为 'int *' 而不是 'int [5]' [-Wsizeof-array-decay] #include
int main(void) { int tbl[ 7 ][ 4 ]; // tbl 的大小 int x = sizeof(*tbl); printf ("%d\n" , x); // tbl 的大小 + 1; int y = sizeof(*tbl+1); printf("%d\n", y); //大小以字节为单位 int z = y - x; printf("%d\n", z);返回0; }