关于整个数组地址的疑惑
array 是数组第一个元素的地址,所以 array + 1 指向数组第二个元素;&array 是整个数组的地址,所以 &array + 1 指向整个数组最后的位置。这里的&array+1是啥意思呀数组最后的位置
那加2是什么
加3呢 看一下这个输出是不是就能理解了
sh-5.1$ cat main.c
#include <stdio.h>
int main(void) {
int a = {1, 2, 3, 4, 5};
printf("%p\n", &a);
printf("%p\n", &a + 1);
printf("%p\n", &a + 2);
printf("%p\n", &a + 3);
return 0;
}
sh-5.1$ ./main
0x7fff823812f0
0x7fff82381304
0x7fff82381318
0x7fff8238132c
sh-5.1$
本帖最后由 jackz007 于 2022-11-23 19:33 编辑
int array
array 属于一个二级指针,& array 就是一个三级指针(int (*)),相当于为 array 新增加了一维,& array 每加减 1 的跨度是整个 array 数组(int (*)),例如,& array + 1 指向 array 数组结束的位置(不是最后一个元素)。就是说,它指向的是下一个 array(如果存在的话)的第一个元素,如果加 2,那自然就是指向下下个 array 的第一个元素,加 3 指向再下一个 array 的第一个元素,余此类推。 本帖最后由 竹逸 于 2022-11-23 20:48 编辑
int a = {1, 2, 3, 4, 5};
数组名a在不和&和sizeof发生关系时,默认为数组的首地址(首元素地址),该地址存储的是int型数据,一个int型数据占4个字节,也就是说int型数据都是以4个字节为1个单位进行读取和存储的,a+1,这个1是相对于首地址的偏移量,即偏移了1个单位(4字节),所以a+1表示 首地址+相对于首地址的偏移量(4字节),得到的是一个新的地址,也就是指向下一个int型数据的地址,即指向a的地址,数组下标就是相对于首地址的偏移量
a和&发生关系时,a就不会被转换成首元素地址,而是代表整个数组,&a就是取整个数组的地址,这个地址上存储的数据横跨了整个数组,是以整个数组作为1个单位,&a+1,就是偏移了整个数组作为1个单位的长度,指向了下一个数组的首地址
页:
[1]