另一个基本的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进制也不对,为什么呢?
[解决办法]
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;}
[解决办法]
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;
[解决办法]
哦~ 是问地址呀~~
#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
[解决办法]