为什么 (int*)++ 前进了 4 而 (int**)++/(int***)++ 前进了 8?所有指针应该是 4 字节还是 8 字节?

问题描述 投票:0回答:1

请尝试以下代码: void intArrayAsPointerPrinter(int iSize){

int * p = 0;
int ** q = 0;
int *** r = 0;
for(int i = 0; i < iSize; i++) {
    printf("%p %p %p\n", p,q,r);
    p++;
    q++;
    r++;
}

}

用大小 3 调用它,我得到以下输出:

0x0 0x0 0x0 0x4 0x8 0x8 0x8 0x10 0x10

问:为什么(int*)++前进4而其他前进8?所有指针应该是 4 字节还是 8 字节?

为什么(int*)++前进4而其他前进8?所有指针应该是 4 字节还是 8 字节?

c pointers
1个回答
0
投票

指针前进会使其前进所指物体之一的大小。

A

int *
指向
int
,因此递增 1 将使其增加
int
的大小。你的正好是四个尺寸。

A

int **
指向
int *
,因此递增 1 将使其增加
int *
的大小。你的正好是八号。

© www.soinside.com 2019 - 2024. All rights reserved.