鱼C论坛

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

这是什么意思

[复制链接]
发表于 2020-5-12 22:32:07 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
main()
{
int a[5]={1,2,3,4,5},*p=(int *)(&a+1);
printf("%d",*(p-1));}

这个程序*p=(int *)(&a+1);这句什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-12 22:41:08 | 显示全部楼层
int *p;
p =(强转成int型指针) (a的地址+1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 10:17:54 From FishC Mobile | 显示全部楼层
ba21 发表于 2020-5-12 22:41
int *p;
p =(强转成int型指针) (a的地址+1)

定义了int型数组a为什么a+1的地址还要强制转换?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 10:21:01 | 显示全部楼层
int *p = (int *)(&a+1) :
就是你定义了一个int 型的指针,而且把这个指针指向了 &a+1 的地址,这个(int *)的意思是将(&a+1)强制转换成一个int 型的指针,这样的话,前面也就可以理解成:指针p指向了另一个指针(*int)(&a+1)
上面的代码还可以写成这样:
int*p = &a+1;
后面你输出的那个*(p-1) == *(&a+1-1) == *(&a),所以输出结果为:5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 12:28:59 From FishC Mobile | 显示全部楼层
鱼京 发表于 2020-5-13 10:21
int *p = (int *)(&a+1) :
就是你定义了一个int 型的指针,而且把这个指针指向了 &a+1 的地址,这个(int  ...

我想知道,定义的a数组已经是int型的,为什么不能把&a+1的地址直接赋给p,而要强制转换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 15:00:11 | 显示全部楼层
Zichenya 发表于 2020-5-13 10:17
定义了int型数组a为什么a+1的地址还要强制转换?

那你说 说你的理由,为什么不要强转?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 00:10:41 From FishC Mobile | 显示全部楼层
这题目在哪本书看到的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 01:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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