鱼C论坛

 找回密码
 立即注册
查看: 2181|回复: 17

[已解决]关于指针的问题

[复制链接]
发表于 2022-5-10 18:34:25 | 显示全部楼层 |阅读模式

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

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

x
没看懂第六行加个int*有什么用,不是本来就是指向整形的指针了吗?
#include <stdio.h>

int main()
{
        int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int *p = (int *)(&array + 1);

        printf("%d\n", *(p - 6));

        return 0;
}
最佳答案
2022-5-10 19:06:58
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)[10]
地址的值是一样,但是类型不一样
一个是 int *,另一个是 int (*)[10]

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

使用道具 举报

发表于 2022-5-10 18:48:18 | 显示全部楼层
本帖最后由 风车呼呼呼 于 2022-5-10 19:10 编辑

看岔了,楼下正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-10 19:06:58 | 显示全部楼层    本楼为最佳答案   
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)[10]
地址的值是一样,但是类型不一样
一个是 int *,另一个是 int (*)[10]

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

使用道具 举报

发表于 2022-5-10 19:13:09 | 显示全部楼层
你需要这篇文章

C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 15:50:41 | 显示全部楼层
人造人 发表于 2022-5-10 19:13
你需要这篇文章

C语言复杂声明解析

讲真...感觉自己水平不够这篇文章没看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 15:52:42 | 显示全部楼层
人造人 发表于 2022-5-10 19:06
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)[10]

这个也没能读懂,还是没看出 int(*)[10]的作用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 15:55:43 | 显示全部楼层
本帖最后由 1613551 于 2022-5-11 16:07 编辑
人造人 发表于 2022-5-10 19:06
不是指向整形的指针,是指向有10个元素的数组的指针
&array + 1 的类型不是 int *
是 int (*)[10]


感谢大佬抽空解答等我学到后面再回过头来看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:07:11 | 显示全部楼层
我看了小甲鱼的解释,其他的都看懂了,但是我还是没懂小甲鱼说的 (int *) 将其强制转换为一个整型地址(指针),这样写的话,int *p = (int *)(&array + 1),就等于p是指向array + 1也就是int array[11]这个地址吗
uTools_1652256160738.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:19:00 | 显示全部楼层
为什么一个是array[4]一个是array[5],但是都是4,不是从0开始算吗?array[0]=0 array[1]=1 array[2]=2 array[3]=3 array[4]=4 那应该array[5]=5啊?
#include <stdio.h>

int main()
{
        int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int *p = (int *)(&array + 1);

        printf("%d\n", *(p - 6));

        return 0;
}
#include <stdio.h>

int main()
{
        int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int (*p)[10] = &array;

        printf("%d\n", *(*(p+1)-6));

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

使用道具 举报

 楼主| 发表于 2022-5-11 16:20:02 | 显示全部楼层
救命,我可能陷入了循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 16:20:13 | 显示全部楼层
1613551 发表于 2022-5-11 16:07
我看了小甲鱼的解释,其他的都看懂了,但是我还是没懂小甲鱼说的 (int *) 将其强制转换为一个整型地址(指 ...

array有10个元素,索引是0~9
&array + 1 是指向 array[10],不是 array[11]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:22:10 | 显示全部楼层
人造人 发表于 2022-5-11 16:20
array有10个元素,索引是0~9
&array + 1 是指向 array[10],不是 array[11]

不是,我array[11]的意思是,超过这个数组的范围了,这个数组一共只有10个元素,而%aray+1就是这个数组最后一位+1也就是array[10]+1,所以是array[11]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 16:25:10 | 显示全部楼层
1613551 发表于 2022-5-11 16:22
不是,我array[11]的意思是,超过这个数组的范围了,这个数组一共只有10个元素,而%aray+1就是这个数组最 ...

???
什么?
array这个数组有几个元素?
10个吧?
array[9] 是最后一个元素吧?
所以,变量p是指向 array[10] 的,有问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:27:45 | 显示全部楼层
人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?

不好意思看错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:28:47 | 显示全部楼层
人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?

那大佬可以解释一下9楼的问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:31:35 | 显示全部楼层
人造人 发表于 2022-5-11 16:25
???
什么?
array这个数组有几个元素?

那个应该是小甲鱼写错了吧,按照你的逻辑11位是array【10】的话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-11 16:36:23 | 显示全部楼层
1613551 发表于 2022-5-11 16:31
那个应该是小甲鱼写错了吧,按照你的逻辑11位是array【10】的话

对,答案的确是写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-11 16:38:30 | 显示全部楼层
人造人 发表于 2022-5-11 16:36
对,答案的确是写错了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 16:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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