gpt4 book ai didi

c - 双指针地址加法问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:21 25 4
gpt4 key购买 nike

我在指针端的开源代码中遇到了一个问题,我试图在下面的这个小片段中复制它。

int main()
{
int **a=0x0;
printf ("a = %d Add = %d\n", a, a+75);
return 1;
}

期望得到 75/0x4B,但这段代码在 32 位机器上给出了 300,在 64 位机器上给出了 600。

输出:

a = 0 Add = 600

但背后的思想是访问添加的位置,即哈希表中的第 75 位。

应该是这样

printf ("a = %d Add = %d\n", a, sizeof (a)+75);

但我无法猜测为什么会输出 300 或 600。谁能指出来?

我一直走到内部发生一些左移的地步,因为:

75 - 1001011
600 - 1001011000.

解决方案表示赞赏。提前致谢。

最佳答案

指针运算总是使用所指向的大小来完成。在你的情况下 a 是一个指向 int 的指针 的指针,所以单位大小是 sizeof(int*) 在你的情况下似乎为 4(32 位)。 4 * 75 = 300。

更准确地说,a + 75 将字节偏移量 sizeof(*a) * 75(注意 a 的取消引用)添加到指针。发生的情况是您有效地执行了 &a[75],即您获得了指向第 75 个元素的指针。

稍微相关一点,当您使用 printf 打印指针时,您应该使用格式 "%p",并将指针转换为 void * 。参见例如this printf (and family) reference .

至于 32 位和 64 位系统上的不同大小,这是可以预料的。 32 位系统上的指针通常为 32 位,而在 64 位系统上为 64 位。

关于c - 双指针地址加法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com