c - 为什么当 "a+1"是一个 int 数组时, "&a+1"和 "a"给出不同的结果?

标签 c

int main()
{
    int a[]={1,2,3,4,5,6,7,8,9,0};

    printf("a = %u , &a = %u\n",a,&a);
    printf("a+1 = %u , &a+1 = %u\n",a+1,&a+1);
}

a 和 &a 在内部是如何解释的?

最佳答案

这两个语句都打印出地址,可能是为了解释指针运算。

a&a 不一样,它们有不同的类型,但是拥有相同的内存地址。

&aint (*)[10] 类型(类似于指向数组的指针)
aint [10] 类型(类似于指向单个元素的指针)

因此,当您添加 1 时,请记住这些类型。指针将偏移地址包含的类型的大小。 a+1 按 int 的大小偏移,即到数组中的第二个元素。 &a+1 完全超出整个数组的偏移量。

关于c - 为什么当 "a+1"是一个 int 数组时, "&a+1"和 "a"给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989370/

相关文章:

c++ - 包含的 C++/C 头文件的实现在哪里?

c - 用于对多边形轮廓中的顶点进行排序的线性时间算法

用于计算一堆定义的最大数量的 C 宏

c - stdio 或 stdlib 中的 system()?

c - !int_variable--是什么意思?

带有 struct 和 fgets 的 C 程序

mysql - 使用 C 连接器将选择和多个插入作为事务执行?

c - 如何在程序开始处声明

c - 在 C 中显示字符串数组的完整值

合并来自 2 个文件的内容 Programming In C