我对增加数组的指针然后测量指针位置的字节差异感到困惑.
我知道*p当通过多维数组移动时,指针将按数据类型的大小递增.但是,当使用数组时thisArray:
int thisArray[ 7 ][ 4 ];
Run Code Online (Sandbox Code Playgroud)
应该如何thisArrray + 1评估?我是否增加行和列?
我想知道这些指针将在内存中分开多少个字节.
我知道确切的答案将取决于平台.我正在寻求解决方法,而不是确切的答案.
由于我无法在评论中格式化代码:我将它放在这里:
//使用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;
}
Run Code Online (Sandbox Code Playgroud)
应如何评估thisArrray + 1?
当thisArray衰减到指针时,指针类型是int (*)[4].类型thisArray+1是一样的.
我是否增加行和列?
是.
如果你看一下thisArray使用行和列结构的内存,你有:
thisArray -> +----+----+----+----+
| | | | |
thisArray + 1 -> +----+----+----+----+
| | | | |
thisArray + 2 -> +----+----+----+----+
| | | | |
thisArray + 3 -> +----+----+----+----+
| | | | |
thisArray + 4 -> +----+----+----+----+
| | | | |
thisArray + 5 -> +----+----+----+----+
| | | | |
thisArray + 6 -> +----+----+----+----+
| | | | |
thisArray + 7 -> +----+----+----+----+
Run Code Online (Sandbox Code Playgroud)
如果要使用数组的遍历元素,可以使用索引或指针.
遍历使用索引:
for ( int i = 0; i < 7; ++i )
{
for ( int j = 0; j < 4; ++j )
{
// Use thisArray[i][j];
}
}
Run Code Online (Sandbox Code Playgroud)
遍历使用指针:
for ( int (*ptr1)[4] = thisArray; ptr1 < thisArray+7; ++ptr1 )
{
for ( int* ptr2 = *ptr1; ptr2 < *ptr1 + 4; ++ptr2 )
{
// Use *ptr2
}
}
Run Code Online (Sandbox Code Playgroud)
从可读性的角度来看,使用索引遍历数组更加直观.我强烈建议使用它.