另一个基本的c语言有关问题
另一个基本的c语言问题
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5= ;
p2+5= ;
这个问题之前有,但我在xp系统上打印出来的结果是p1+5=4101;p2+5=20;
转成16进制也不对,为什么呢?
------解决方案--------------------
unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
请问p1+5= ;
p2+5= ;
这个问题之前有,但我在xp系统上打印出来的结果是p1+5=4101;p2+5=20;
转成16进制也不对,为什么呢?
------解决方案--------------------
- C/C++ code
int main() { unsigned char *p1 = (unsigned char *)(0x801000); unsigned long *p2 = (unsigned long *)(0x810000); cout<<hex<<(long)p1<<ends<<hex<<(long)p2<<endl; p1 += 5; p2 += 5; cout<<hex<<(long)p1<<ends<<hex<<(long)p2<<endl; return 0; }
------解决方案--------------------
- C/C++ code
unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; cout<<"0X"<<hex<<(void*)(p1+5)<<endl; cout<<"0X"<<hex<<(void*)(p2+5)<<endl;
------解决方案--------------------
哦~ 是问地址呀~~
- C/C++ code
#include <stdio.h> int main(void) { unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; p1=p1+5; p2=p2+5; printf("%x,%x",p1,p2); getchar(); return 0; }
------解决方案--------------------
就是一个指针加法中1代表什么的问题
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
------解决方案--------------------
LZ也许没输0x
p2=(unsigned long *)810000;
这样把p2+5用%d输出的话,的确是810020
如果真如题目,用%x输出应该是p1 = 0x801005, p2 = 0x810014
------解决方案--------------------
------解决方案--------------------
我明白了...你用的是TC,%x只输出16位长度.
------解决方案--------------------
------解决方案--------------------