c语言 这个程序怎么解释

structTest{intNum;char*pcName;shortsDate;charcha[2];shortsBa[4];}*p;假设p的值威为0x100000,如... struct Test
{
int Num;
char *pcName;
short sDate;
char cha[2];
short sBa[4];
} *p;

假设p的值威为 0x100000,如下表达式的值分别为多少?

p + 0x1 = 0x____?
(unsigned long) p + 0x1 = 0x______?
(unsigned int*) p + 0x1 = 0x_______?

请给出讲解,不要直接给答案
展开
 我来答
昊天wxt
2010-08-26 · 超过17用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:49.5万
展开全部
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
百度网友e59b677
2010-08-26 · TA获得超过622个赞
知道小有建树答主
回答量:926
采纳率:0%
帮助的人:248万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dreaminit
2010-08-26
知道答主
回答量:23
采纳率:0%
帮助的人:13万
展开全部
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所指向的变量的下一个存储单元的值转化为整型。题目中未给出该地址保存什么值,因此结构是不可预料的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d050c1b
2010-08-26 · TA获得超过933个赞
知道小有建树答主
回答量:1083
采纳率:50%
帮助的人:1023万
展开全部
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)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式