C++这种题目怎么做啊

时间:2022-07-27 23:49:57
  [size=24px] unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
      请问p1+5= ;
p2+5= ;
[/size

15 个解决方案

#1


unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;

#2


p1 + 5 = p1 + sizeof(unsigned char) * 5 = 0x801000 + 1 * 5 = 0x801005
p2 + 5 = p1 + sizeof(unsigned long) * 5 = 0x810000 + 4 * 5 = 0x810014

#3


谢谢你的回复,能解释下吗?
看不懂。。。

#4


引用 3 楼 wsmyaoquhuawei 的回复:
谢谢你的回复,能解释下吗?
看不懂。。。


具体哪里不懂?
把你不懂的地方都提出来,你不说我无法知道你哪里不懂。

#5


呵呵,我想我理解你的做法了,
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。

请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714

这个结果是不是也应该正确呢?

#6


引用楼主 wsmyaoquhuawei 的帖子:
  [size=24px]unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;[/size


p1指向char型,所以+1就是移动4个字节,sizeof(unsigned char)=1
p2指向long型,所以+1就是移动4个字节,sizeof(unsigned long)=4

那么:
 p1+5=0x801000+1*5
 p2+5=0x801000+4*5

总结:p+n = p+sizeof(*p)*n;

#7


引用 5 楼 wsmyaoquhuawei 的回复:
呵呵,我想我理解你的做法了, 
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。 
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。 

请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714 

这个结果是不是也应该正确呢?

这样是错误的!

#8


为什么呢?

#9


学习··

#10


指针和整数进行加减运算的结果与指针的类型密切相关。比如右指针p1和整数n1,p1+n1表示p1当前位置后方第n1个数的地址,p2-n1表示指针p1当前位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前位置下一个或前一个数据的地址。每次相加减时要加上该指针指向数据类型所占字节数*相加减数字。比如有指针p3,整数n3,p3+n3 =p3+整型数所占字节数*n3 = p3+ sizeof(int)*3 ,相减类似。 
引用 1 楼 wsmyaoquhuawei 的回复:
unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;

此题中:
   p1+5 表示p1当前位置后方第5个数的地址 
   p1 + 5 = p1 + sizeof(unsigned char) * 5 = 0x801000 + 1 * 5 = 0x801005 
   p2+5 表示p2当前位置后方第5个数的地址
   p2 + 5 = p1 + sizeof(unsigned long) * 5 = 0x810000 + 4 * 5 = 0x810014
       

#11


引用 10 楼 xiejhzwrgcky 的回复:
指针和整数进行加减运算的结果与指针的类型密切相关。比如右指针p1和整数n1,p1+n1表示p1当前位置后方第n1个数的地址,p2-n1表示指针p1当前位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前位置下一个或前一个数据的地址。每次相加减时要加上该指针指向数据类型所占字节数*相加减数字。比如有指针p3,整数n3,p3+n3 =p3+整型数所占字节数*n3 = p3+ sizeof(int)*3 ,相减类似。 
引用 1 楼 wsmyaoquhuawei 的回复:
u…

up

#12


顶!

#13


0x801000是不是代表起始地址啊!這個是不是可以自己隨便寫?

#14


引用 1 楼 wsmyaoquhuawei 的回复:
unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;

这里p1类型unsigned char*,p1+1就等同于p1地址加sizeof(unsigned char);
p2类型unsigned long *,p2+1等同于p2地址加sizeof(unsigned long);

#15


UP

#1


unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;

#2


p1 + 5 = p1 + sizeof(unsigned char) * 5 = 0x801000 + 1 * 5 = 0x801005
p2 + 5 = p1 + sizeof(unsigned long) * 5 = 0x810000 + 4 * 5 = 0x810014

#3


谢谢你的回复,能解释下吗?
看不懂。。。

#4


引用 3 楼 wsmyaoquhuawei 的回复:
谢谢你的回复,能解释下吗?
看不懂。。。


具体哪里不懂?
把你不懂的地方都提出来,你不说我无法知道你哪里不懂。

#5


呵呵,我想我理解你的做法了,
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。

请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714

这个结果是不是也应该正确呢?

#6


引用楼主 wsmyaoquhuawei 的帖子:
  [size=24px]unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;[/size


p1指向char型,所以+1就是移动4个字节,sizeof(unsigned char)=1
p2指向long型,所以+1就是移动4个字节,sizeof(unsigned long)=4

那么:
 p1+5=0x801000+1*5
 p2+5=0x801000+4*5

总结:p+n = p+sizeof(*p)*n;

#7


引用 5 楼 wsmyaoquhuawei 的回复:
呵呵,我想我理解你的做法了, 
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。 
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。 

请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714 

这个结果是不是也应该正确呢?

这样是错误的!

#8


为什么呢?

#9


学习··

#10


指针和整数进行加减运算的结果与指针的类型密切相关。比如右指针p1和整数n1,p1+n1表示p1当前位置后方第n1个数的地址,p2-n1表示指针p1当前位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前位置下一个或前一个数据的地址。每次相加减时要加上该指针指向数据类型所占字节数*相加减数字。比如有指针p3,整数n3,p3+n3 =p3+整型数所占字节数*n3 = p3+ sizeof(int)*3 ,相减类似。 
引用 1 楼 wsmyaoquhuawei 的回复:
unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;

此题中:
   p1+5 表示p1当前位置后方第5个数的地址 
   p1 + 5 = p1 + sizeof(unsigned char) * 5 = 0x801000 + 1 * 5 = 0x801005 
   p2+5 表示p2当前位置后方第5个数的地址
   p2 + 5 = p1 + sizeof(unsigned long) * 5 = 0x810000 + 4 * 5 = 0x810014
       

#11


引用 10 楼 xiejhzwrgcky 的回复:
指针和整数进行加减运算的结果与指针的类型密切相关。比如右指针p1和整数n1,p1+n1表示p1当前位置后方第n1个数的地址,p2-n1表示指针p1当前位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前位置下一个或前一个数据的地址。每次相加减时要加上该指针指向数据类型所占字节数*相加减数字。比如有指针p3,整数n3,p3+n3 =p3+整型数所占字节数*n3 = p3+ sizeof(int)*3 ,相减类似。 
引用 1 楼 wsmyaoquhuawei 的回复:
u…

up

#12


顶!

#13


0x801000是不是代表起始地址啊!這個是不是可以自己隨便寫?

#14


引用 1 楼 wsmyaoquhuawei 的回复:
unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000; 
      请问p1+5= ; 
p2+5= ;

这里p1类型unsigned char*,p1+1就等同于p1地址加sizeof(unsigned char);
p2类型unsigned long *,p2+1等同于p2地址加sizeof(unsigned long);

#15


UP