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= ;
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
p2 + 5 = p1 + sizeof(unsigned long) * 5 = 0x810000 + 4 * 5 = 0x810014
#3
谢谢你的回复,能解释下吗?
看不懂。。。
看不懂。。。
#4
具体哪里不懂?
把你不懂的地方都提出来,你不说我无法知道你哪里不懂。
#5
呵呵,我想我理解你的做法了,
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。
请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714
这个结果是不是也应该正确呢?
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。
请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714
这个结果是不是也应该正确呢?
#6
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
这样是错误的!
#8
为什么呢?
#9
学习··
#10
指针和整数进行加减运算的结果与指针的类型密切相关。比如右指针p1和整数n1,p1+n1表示p1当前位置后方第n1个数的地址,p2-n1表示指针p1当前位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前位置下一个或前一个数据的地址。每次相加减时要加上该指针指向数据类型所占字节数*相加减数字。比如有指针p3,整数n3,p3+n3 =p3+整型数所占字节数*n3 = p3+ sizeof(int)*3 ,相减类似。
此题中:
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
此题中:
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
up
#12
顶!
#13
0x801000是不是代表起始地址啊!這個是不是可以自己隨便寫?
#14
这里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= ;
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
p2 + 5 = p1 + sizeof(unsigned long) * 5 = 0x810000 + 4 * 5 = 0x810014
#3
谢谢你的回复,能解释下吗?
看不懂。。。
看不懂。。。
#4
具体哪里不懂?
把你不懂的地方都提出来,你不说我无法知道你哪里不懂。
#5
呵呵,我想我理解你的做法了,
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。
请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714
这个结果是不是也应该正确呢?
是不是p1+5 表示p1指针向后移动5个(单位?),计算p1+5要把每个单位的偏移地址加上才得到它的地址值。
呵呵,很菜鸟的,刚看了些指针资料,才知道一些。
请问在p1=(unsigned char *)0x801000; 中我把0x801000转化为十进制8392709,再直接+5等于8392714
这个结果是不是也应该正确呢?
#6
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
这样是错误的!
#8
为什么呢?
#9
学习··
#10
指针和整数进行加减运算的结果与指针的类型密切相关。比如右指针p1和整数n1,p1+n1表示p1当前位置后方第n1个数的地址,p2-n1表示指针p1当前位置前方第n1个数的地址。“指针++”或“指针--”表示指针当前位置下一个或前一个数据的地址。每次相加减时要加上该指针指向数据类型所占字节数*相加减数字。比如有指针p3,整数n3,p3+n3 =p3+整型数所占字节数*n3 = p3+ sizeof(int)*3 ,相减类似。
此题中:
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
此题中:
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
up
#12
顶!
#13
0x801000是不是代表起始地址啊!這個是不是可以自己隨便寫?
#14
这里p1类型unsigned char*,p1+1就等同于p1地址加sizeof(unsigned char);
p2类型unsigned long *,p2+1等同于p2地址加sizeof(unsigned long);
#15
UP