永发信息网

c语言 这个程序怎么解释

答案:4  悬赏:70  手机版
解决时间 2021-05-04 21:15
c语言 这个程序怎么解释
最佳答案
p + 0x1 = 0x100014
p是结构体的首地址,则p+1这是指向下一个结构体的地址,而一个结构体所占的内存为sizeof(struct Test)=20.

(unsigned long) p + 0x1 = 0x100001
p的值是一个地址值为0x100000,(unsigned long)p把p转换为一个无符号长整形数值,其加1之后,就是0x100001

(unsigned int*) p + 0x1 = 0x100004
p的值是一个地址值为0x100000,(unsigned int*) p把p转换为无符号长整形的指针,而c/c++语言中,一个长整形指针占四个内存,所以,其值为:0x100004
全部回答
p + 0x1 = p + 0x1 * sizeof(struct Test)
(unsigned long) p + 0x1 = (unsigned long)p + (unsigned long) 0x1
(unsigned int *)p + 0x1 = (unsigned int *)p + 0x1 * sizeof(unsigned int)
1. p + 0x1 = 0x____?
实际上就是p + 1 = p的地址加上sizeof(Test)
而sizeof(Test) = 4(int)+4(char*)+(2(short)+2(char[2]))+8(short[4])=20
所以填100014。
2. (unsigned long) p + 0x1 = 0x______?
这个就相当与把p转换为数值再+1,就很简单了。
所以填100001.
3. (unsigned int*) p + 0x1 = 0x_______?
这个是把p转换为int型的。
p + 1 = p的地址加上sizeof(int)
所以填100004
p是一个指针,保存的是地址值
p+0x1=p+1即为p所指向的变量的下一个存储单元的地址值,因为p指向的结构体长度为2+2+2+2+2*4=16字节(在字长为16位的机器中),因此
p+0x1=0x100000+0x000100=0x100100
地址值本质上是一个无符号整型,因此:
(unsigned long) p + 0x1 = 0x100100,即将无符号整型转化为无符号长整型
(unsigned int*) p + 0x1 = 0x_______?即将p所指向的变量的下一个存储单元的值转化为整型。题目中未给出该地址保存什么值,因此结构是不可预料的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
现在什么时间
宏基4741G这款机子用起来怎么样???
QQ飞车车队目前多少积分可以进入车队前一千名
世界那么多间医院,请问那间医院不和人看病的
nba揭幕战热火战绿军,谁会赢
有哪些好听的歌 要最近的新歌
太阳穴下面一点张了一个小包…摸一下都会痛…
小时代八月连载到哪可以看到
风景描述心情的句子,描写心理紧张的句子
铁山靠,闪电,春丽分别冷却几秒?升龙拳前置
DNF中怎么开图呢???
爱惜公益图标咋亮了?
邱县中心医院-住院楼在什么地方啊,我要过去
热血传奇怎么挖矿,手游热血传奇挖矿工具在商
不能上网(高分)要详细
推荐资讯
婚外恋就一定是一种错误吗??……
朋友们:有谁知道石林周边有场房或仓库要出租
形容性格温和诗句
找一部动漫同人小说的名字
为什么每小时是60分钟
即使现在不出国也是可以办护照的吗?
怎么屏蔽360封网站
谁有高等数学(上)的考试题?
做什么工作最赚钱?
诛仙二新门派
安装程序?怎么弄?
孔子的主要思想观点在当时为什么不受统治者的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?