鱼C论坛

 找回密码
 立即注册
查看: 2577|回复: 3

[已解决]关于整个数组地址的疑惑

[复制链接]
发表于 2022-11-23 18:53:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
array 是数组第一个元素的地址,所以 array + 1 指向数组第二个元素;&array 是整个数组的地址,所以 &array + 1 指向整个数组最后的位置。


这里的&array+1是啥意思呀数组最后的位置
那加2是什么
加3呢
最佳答案
2022-11-23 19:10:40
本帖最后由 jackz007 于 2022-11-23 19:33 编辑
        int array[3][5]
     array 属于一个二级指针,& array 就是一个三级指针(int (*)[3][5]),相当于为 array 新增加了一维,& array 每加减 1 的跨度是整个 array 数组(int (*)[3][5]),例如,& array + 1 指向 array 数组结束的位置(不是最后一个元素)。就是说,它指向的是下一个 array(如果存在的话)的第一个元素,如果加 2,那自然就是指向下下个 array 的第一个元素,加 3 指向再下一个 array 的第一个元素,余此类推。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-23 18:57:52 | 显示全部楼层
看一下这个输出是不是就能理解了
sh-5.1$ cat main.c
#include <stdio.h>

int main(void) {
    int a[5] = {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$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-23 19:10:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-23 19:33 编辑
        int array[3][5]
     array 属于一个二级指针,& array 就是一个三级指针(int (*)[3][5]),相当于为 array 新增加了一维,& array 每加减 1 的跨度是整个 array 数组(int (*)[3][5]),例如,& array + 1 指向 array 数组结束的位置(不是最后一个元素)。就是说,它指向的是下一个 array(如果存在的话)的第一个元素,如果加 2,那自然就是指向下下个 array 的第一个元素,加 3 指向再下一个 array 的第一个元素,余此类推。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-23 19:45:30 From FishC Mobile | 显示全部楼层
本帖最后由 竹逸 于 2022-11-23 20:48 编辑

int a[5] = {1, 2, 3, 4, 5};
数组名a在不和&和sizeof发生关系时,默认为数组的首地址(首元素地址),该地址存储的是int型数据,一个int型数据占4个字节,也就是说int型数据都是以4个字节为1个单位进行读取和存储的,a+1,这个1是相对于首地址的偏移量,即偏移了1个单位(4字节),所以a+1表示 首地址+相对于首地址的偏移量(4字节),得到的是一个新的地址,也就是指向下一个int型数据的地址,即指向a[1]的地址,数组下标就是相对于首地址的偏移量

a和&发生关系时,a就不会被转换成首元素地址,而是代表整个数组,&a就是取整个数组的地址,这个地址上存储的数据横跨了整个数组,是以整个数组作为1个单位,&a+1,就是偏移了整个数组作为1个单位的长度,指向了下一个数组的首地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表