鱼C论坛

 找回密码
 立即注册
查看: 1902|回复: 6

关于指针和指针数组和数组的问题。

[复制链接]
发表于 2021-2-3 18:26:02 | 显示全部楼层 |阅读模式

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

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

x
关于指针和指针数组和数组的问题。
例:


        int ch1[5] = {10, 20, 30, 40, 50};
        int ch2[5] = {100, 200, 300, 400, 500};
        int ch3[5] = {1000, 2000, 3000, 4000, 5000};

        int *ch[1024] = {ch1, ch2, ch3};

        printf("ch1 = %p\n", ch1);
        printf("ch[0] = %p\n", ch[0]);
        printf("ch[1] = %p\n", ch[1]);
        printf("ch[2] = %p\n", ch[2]);
        printf("ch1+1 = %p\n", ch1+1);
        printf("ch[0]+1 = %p\n", ch[0]+1);
        printf("ch[1]+1 = %p\n", ch[1]+1);
        printf("ch[2]+1 = %p\n", ch[2]+1);

        printf("*ch1 = %d\n", *ch1);
        printf("*(ch[0]) = %d\n", *(ch[0]));
        printf("*(ch[1]) = %d\n", *(ch[1]));
        printf("*(ch[2]) = %d\n", *(ch[2]));
        printf("*(ch1+1) = %d\n", *(ch1+1));
        printf("*(ch[0]+1) = %d\n", *(ch[0]+1));
        printf("*(ch[1]+1) = %d\n", *(ch[1]+1));
        printf("*(ch[2]+1) = %d\n", *(ch[2]+1));
        putchar('\n');

        printf("ch = %p\n", ch);
        printf("*ch = %p\n", *ch);
        printf("ch+1 = %p\n", ch+1);
        printf("*ch+1 = %p\n", *ch+1);
        putchar('\n');

        printf("**ch = %d\n", **ch);
        printf("**(ch+1) = %d\n", **(ch+1));
        printf("*(*ch+1) = %d\n", *(*ch+1));
        putchar('\n');


执行结果为:

ch1 = 0xbfc5eeb8
ch[0] = 0xbfc5eeb8
ch[1] = 0xbfc5eea4
ch[2] = 0xbfc5ee90
ch1+1 = 0xbfc5eebc
ch[0]+1 = 0xbfc5eebc
ch[1]+1 = 0xbfc5eea8
ch[2]+1 = 0xbfc5ee94
*ch1 = 10
*(ch[0]) = 10
*(ch[1]) = 100
*(ch[2]) = 1000
*(ch1+1) = 20
*(ch[0]+1) = 20
*(ch[1]+1) = 200
*(ch[2]+1) = 2000

ch = 0xbfc5de90
*ch = 0xbfc5eeb8
ch+1 = 0xbfc5de94
*ch+1 = 0xbfc5eebc

**ch = 10
**(ch+1) = 100
*(*ch+1) = 20


求问**(ch+1) 为什么等于100,应该等于2000?还是等于其他???????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 09:58:07 From FishC Mobile | 显示全部楼层
很简单啊,ch是个数组,ch可作为指针指向数组内首元素ch1,ch+1则指向数组内第二个元素ch2,一层解引用得到元素ch2,ch2这里又作为指针处理,也就是数组ch2的首元素地址,第二次解引用就得到数组ch2的这个首元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 10:07:28 | 显示全部楼层
倒戈卸甲 发表于 2021-2-4 09:58
很简单啊,ch是个数组,ch可作为指针指向数组内首元素ch1,ch+1则指向数组内第二个元素ch2,一层解引用得到 ...

兄弟,你看执行结果的地址,这不是数组指针,这是指针数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 12:28:30 From FishC Mobile | 显示全部楼层
本帖最后由 倒戈卸甲 于 2021-2-4 12:41 编辑
You-Name 发表于 2021-2-4 10:07
兄弟,你看执行结果的地址,这不是数组指针,这是指针数组


???这就是我此刻的心情,你在讲什么?还是说你看不懂我敲的字?我上面写的不就是ch是个数组。然后你跑来跟我说这不是数组指针,这是指针数组???我没眼花吧?是你没睡醒还是我没睡醒?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 12:34:45 From FishC Mobile | 显示全部楼层
而且你不是打印了地址吗?你按我说的去看,ch本身指向数组首元素,ch一层解引用是不是得到ch1?你打印ch1和打印*ch是不是一个结果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 14:45:17 | 显示全部楼层
ch是一个指针数组
//以下不是代码,等号仅表示两者相同,并非赋值或逻辑比较
ch = (ch[0]地址)
ch+1 = (ch[1]的地址)
*(ch+1) = ch[1] = ch2 //指针数组中依次存放的是ch1,ch2,ch3三个指针,即每个数组的首元素地址
**(ch+1) = *ch[1] = *ch2 = ch2[0]    //ch2[0]的值是100

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 14:21:57 | 显示全部楼层
ch指针数组 存放的是指针
**(ch+1)== * ( * ( ch+1)+0)
ch+1就指向ch2    也就是 &ch2
*(ch+1)-->ch2==&ch2[0]
**(ch+1)==     &ch2[0]
所以=100
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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