首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

另一个基本的c语言有关问题

2012-10-19 
另一个基本的c语言问题unsigned char *p1  unsigned long *p2  p1(unsigned char *)0x801000  p2(uns

另一个基本的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进制也不对,为什么呢?

[解决办法]

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,xp下

[解决办法]
我明白了...你用的是TC,%x只输出16位长度.
[解决办法]
探讨
引用:
我明白了...你用的是TC,%x只输出16位长度.

TC有这样的特性?

[解决办法]
探讨
如果不是32位的,是16位系统,那么在做long之类的类型的时候不会有问题吗?

热点排行