84 数组地址的几种计算方式
前言
我们都知道 数字类型 的加1, 就是该 数字+1
如果是结构体 X 变量 x, &x + 1 为 &x + (sizeof(X))
那么 对于 数组便变量呢 int x[5], x, x+1, &x, &x+1 分别表示什么呢?
测试用例
测试用例如下, 主要也是 探究如上 x, x+1, &x, &x+1
#include "stdio.h"int main() {int a[5];printf("a = 0x%x \n", a);printf("a + 1 = 0x%x \n", a + 1);printf("&a = 0x%x \n", &a);printf("&a + 1 = 0x%x \n", &a + 1);return 0;}
程序输出结果为
root@ubuntu:~/Desktop/linux/HelloWorld# ./Test24ArraysAddress
a = 0xffffe4c0
a + 1 = 0xffffe4c4
&a = 0xffffe4c0
&a + 1 = 0xffffe4d4
问题的推导调试
其中 a 和 &a 的计算方式一致
a 为当前 int[5] 的地址
a + 1 为 a + 1 * sizeof(a[0])
&a 等价于 &a[0], 即为 a
&a + 1 为 a + sizeof(a)
根据反编译 之后的结果, 可以证实上面的结论
完