首页 > 试题广场 >

根据题目回答p1+5= 什么?p2+5= 什么?

[单选题]
unsigned char *p1; 
unsigned long *p2; 
p1 = (unsigned char *)0x801000; 
p2 = (unsigned long *)0x810000; 
请问p1+5= 什么?
p2+5= 什么?
  • 801005   810005
  • 801005   810020
  • 801005   810014
  • 801010  810014
推荐
1代表的是一个单位量 
p1+5=p1+5*1=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ox5=0x801005 
p2+5=p2+5*1=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=0x810000+0x14=0x810014 
最后要转换成16进制

编辑于 2015-12-21 09:40:54 回复(13)

解析:p1指向字符型,一次移动一个字符型,1个字节;p1+5后移5个字节,16进制表示为5;

            p2指向长整型,一次移动一个长整型,4个字节,p2+5后移20字节,16进制表示为14。

 { char每次移动1个字节;short移动2个字节 int , long ,float移动4个字节 double移动8个字节}

发表于 2017-04-12 15:12:10 回复(8)
1_1头像 1_1
是指针大小或者是指针指向内容的大小,注意进制的转换
编辑于 2016-03-19 20:03:06 回复(0)
801005; 810014。
发表于 2014-11-15 13:04:11 回复(0)
注意是16进制,一个unsigned long占4个字节,指针是跳类型不是跳字节的,所以跳5就是偏移4*5=20个字节,8进制14,加上段地址0x810000就是0x810014,
发表于 2015-03-10 11:14:43 回复(7)
这里的long是4个字节 4*5=20,再转化为16进制数 0x14。
char是1个字节。1*5=5, 0x05
发表于 2015-05-12 20:59:09 回复(0)
忘记转16进制了😅
发表于 2022-03-11 18:00:56 回复(0)
把一个地址赋给指针变量,注意格式。
当指针自增时,地址按sizeof(类型)增加: 若指针类型是char,p1+5,就是 p1+5*1;
                                                                  若指针类型是unsigned long, p2+5,就是 p2+5*4。
注意 unsigned long也是4个字节,不是8个。
编辑于 2017-04-18 11:02:50 回复(0)
这题考的是指针运算,移动的位移数n其实是表示指针移动了n个指针类型长度的内存位置(一个内存长度为一个字节)。 题目中unsigned char类型长度为1个字节,unsigned long类型长度为4个字节。所以: p1+5=0x801000+5*1=0x801000+5 =0x801000+5=0x801000+0x5 =0x801005 p2+5=0x810000+5*4=0x810000+20=0x810000+20=0x810000+0x14 =0x810014
编辑于 2021-01-25 11:40:48 回复(0)
来自@ AC_LI
1代表的是一个单位量   
p1+5=p1+5*1=p1+5*sizeof(unsigned char)=p1+5*1=0x801000+ox5=0x801005   
p2+5=p2+5*1=p2+5*sizeof(unsigned long)=p1+5*4=0x810000+20=0x810000+0x14=0x810014 
最后要转换成16进制

编辑于 2017-04-28 19:05:06 回复(0)
记得0x...是十六进制,char是单个字符,long是四个字符。
发表于 2020-12-24 16:15:53 回复(0)

本题本身就是不严谨的。如果在windows系统下unsigned long为四个字节,但是在Linux系统下unsigned long为八个字节。因此题目并没有指定操作系统为Windows。

发表于 2019-10-06 20:25:57 回复(0)

解析:p1指向字符型,一次移动一个字符型,1个字节;p1+5后移5个字节,16进制表示为5;

            p2指向长整型,一次移动一个长整型,4个字节,p2+5后移20字节,16进制表示为14。

 { char每次移动1个字节;short移动2个字节 int , long ,float移动4个字节 double移动8个字节}

发表于 2019-06-25 19:37:07 回复(0)
这道题没指定32位还是64位,没指定Linux还是Windows,linux 64位下long是8字节!!!
发表于 2019-04-05 10:25:02 回复(1)
char 1个字节,short 2个字节   int long float 4字节   double 8字节
发表于 2018-09-10 19:50:11 回复(0)
指针的偏移:偏移的量和指针类型有关,int型指针+1就是偏移了四个字节,char型型指针+1就是偏移了一个字节等等
发表于 2018-07-27 16:53:19 回复(0)
0x是16进制的意思。指针加1是指加上1个指针所指向的数据的类型的长度
发表于 2018-03-21 12:04:27 回复(0)
十六进制 十六进制
发表于 2017-08-21 10:15:24 回复(0)
地址是用Ox开头的,所以是16进制,
发表于 2020-08-19 08:52:51 回复(0)
妈的,我在那寻思半天怎么没有20的答案,原来是十六进制。。
发表于 2020-02-24 01:40:02 回复(0)
p1指向字符型,一次移动一个字符型,1个字节;p1+5后移5个字节,16进制表示为5;
p2指向长整型,一次移动一个长整型,4个字节,p2+5后移20字节,16进制表示为14。

 { char每次移动1个字节;short移动2个字节 int , long ,float移动4个字节 double移动8个字节

发表于 2019-12-16 14:17:32 回复(0)