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_______?
请给出讲解,不要直接给答案 展开
{
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_______?
请给出讲解,不要直接给答案 展开
4个回答
展开全部
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是结构体的首地址,则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
展开全部
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 + 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所指向的变量的下一个存储单元的值转化为整型。题目中未给出该地址保存什么值,因此结构是不可预料的
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所指向的变量的下一个存储单元的值转化为整型。题目中未给出该地址保存什么值,因此结构是不可预料的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)
(unsigned long) p + 0x1 = (unsigned long)p + (unsigned long) 0x1
(unsigned int *)p + 0x1 = (unsigned int *)p + 0x1 * sizeof(unsigned int)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询