c语言 这个程序怎么解释
答案:4 悬赏:70 手机版
解决时间 2021-05-04 21:15
- 提问者网友:遁入空寂
- 2021-05-04 15:44
c语言 这个程序怎么解释
最佳答案
- 五星知识达人网友:走死在岁月里
- 2021-05-04 16:42
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楼网友:渡鹤影
- 2021-05-04 17:45
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)
- 2楼网友:孤独的牧羊人
- 2021-05-04 17:32
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
- 3楼网友:鸽屿
- 2021-05-04 16:52
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所指向的变量的下一个存储单元的值转化为整型。题目中未给出该地址保存什么值,因此结构是不可预料的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯