gpt4 book ai didi

c - 添加到整数数组基地址 C?

转载 作者:太空狗 更新时间:2023-10-29 16:06:22 26 4
gpt4 key购买 nike

int main()
{
int a[] = {1,2,3,4,5};
printf("Base Address of array = %p\n",a);
printf("Address1 = %p \t Address2 = %p\n",a+1,&a+1);
return 0;
}

在打印中,“a”都代表数组的基地址,但第一个递增 4 个字节,第二个递增 20 个字节。有什么具体原因吗?

输出:

Base Address of array 0x7fff2059b240                                                                                                                        
Address1 = 0x7fff2059b244 Address2 = 0x7fff2059b254

最佳答案

两个概念:

  1. 指针算法基于所指向类型的大小。换句话说,如果您有一个指向类型 T 的指针,然后向该指针加 1 将为您提供下一个类型为 T对象 的地址。 .

  2. 除非它是 sizeof 的操作数或一元 &运算符,类型为“T 的 N 元素数组”的 表达式 将被转换(“衰减”)为类型为“指向 T 的指针”的表达式,以及表达式的值将是数组第一个元素的地址。

您声明了 a作为 int 的 5 元素数组.假设 4 字节 int ,数组占用20个字节。

表达式 a “衰减”以键入 int * , 所以加 1 给你下一个 int 的地址关注对象a (IOW,它与 &a[1] 相同)。

表达式&a类型为 int (*)[5] (指向 int 的 5 元素数组的指针),因此向它加 1 将为您提供 int 的下一个 5 元素数组的地址。

关于c - 添加到整数数组基地址 C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32234360/

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