gpt4 book ai didi

c - 为什么指针 +1 包含的内存地址与指向的值的地址 +1 不同

转载 作者:行者123 更新时间:2023-12-04 11:54:46 24 4
gpt4 key购买 nike

指针存储的是所指向的值的内存地址,因此指针所包含的内存地址与值的内存地址相同。因此,向这两个内存地址加 1 应该会产生相同的结果,但这并没有发生。为什么?这是代码

 int main()
{
int ages[] = {23, 43, 12, 89, 2};
int *cur_ages = ages;

printf("\n&cur_ages=%p, &cur_ages+1=%p", &cur_ages, &cur_ages+1);
printf("\n&ages=%p, &ages+1=%p", &ages, &ages+1);
printf("\ncur_ages=%p, cur_ages+1=%p", cur_ages, cur_ages+1);
printf("\n*cur_ages=%d, *cur_ages+1=%d", *cur_ages, *(cur_ages+1));

return 0;
}

输出是

&cur_ages=0x1ffff85f3d0, &cur_ages+1=0x1ffff85f3d8
&ages=0x1ffff85f3dc, &ages+1=0x1ffff85f3f0
cur_ages=0x1ffff85f3dc, cur_ages+1=0x1ffff85f3e0
*cur_ages=23, *cur_ages+1=43

&ages+1 不等于 cur_ages+1。为什么?

最佳答案

指针算法将指针的值增加给定值乘以它指向的类型的大小。

所以当你这样做的时候:

&ages+1

您获取 ages 的地址(类型为 int [5])并将 sizeof(ages) 添加到指针值.假设 sizeof(int) 为 4,这会将指针值加 20。

同样,当您这样做时:

cur_ages+1

这里,cur_ages 指向一个 int,因此加 1 会将 sizeof(int) 添加到指针值。

关于c - 为什么指针 +1 包含的内存地址与指向的值的地址 +1 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38513618/

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