打印

迷惑中过的C语言的指针问题

[复制链接]
1412|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
biehoff|  楼主 | 2008-10-13 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
指针就是地址  我是这么理解的  
    如果定义一个 char 变量  char a ;  
    那么 很明显定义指向他的指针   char *p; *p=a; 
p的值就是a的地址吧 我笨笨的举例 a是char型的a的内容是0x20 地址在0x10那么p的值就是0x10了   书上说 char *p 是定义一个指向 char型变量的指针变量 知道p是指向char型的变量 但是我觉得没有理由说p也是char型的  如果内存地址都是16位的 从0x0000到0xffff 就算里面每个单元是byte 8位 那么地址也都是16位的  也就是刚才说的 p的应该是 short int 型的 值是0x0010 
 其实指针也是个变量吧 也是需要存放的 貌似从 char *p; *p=a 这两句只能说明 p是装a的地址 具体p是多少位的地址 那就由系统硬件决定 所以我就认为char *p 是定义p 指向目标的类型 而没决定p的类型 
如果不这么想 好象没法解释44b0初始化程序的一句 
  #define rUTXH0    (*(volatile unsigned char *)0x1d00020)
UTXH0是UART的 发送保持寄存器 地址是32位的 但里面装的内容是个byte 8位
   
不知道这么理解对不对  大侠们指点下

相关帖子

沙发
玄德| | 2008-10-13 16:16 | 只看该作者

你理解的很对。

没错,p是装a的地址 具体p是多少位的地址 那就由系统硬件决定。p的位数视芯片类型而变,可以是16位,也可以是32位,在51里是16位,在DSP2407里也是16位,但DSP2812就是32位的。p的位数实际上是由编译器设定的。

使用特权

评论回复
板凳
sxggj| | 2008-10-13 16:44 | 只看该作者

写的太多了,看的累

char *p===========(char*)p,从你最后那个实例中应该能看出来括号在哪儿,所以说char*类型的指针当然是跟char型变量占用的字节是一样的了

使用特权

评论回复
地板
sanwa_chen| | 2008-10-13 16:52 | 只看该作者

p不是char类型的,是指向char类型的‘指针’

p不是char类型的,是指向char类型的‘指针’。

简单的例子来说吧

char a[10] = {0,1,2,3,4,5,6,7,8,9];
char *p;

  p = &a[0];
/*
假设a[]地址从0x1000开始,如下
0x1000:
00 01 02 03 04 05 06 07 08 09

不同的系统下a[0] 的地址长度是不尽一样的,当你定义了 char *p时,并不是说 p 就是 8 位的,而是说 p 这个地址里存放的内容是 char型的(8位的),当做如下运算的时候
*/

 p++;//因为p是指向char型的(8位),所以该处以8位(1Byte)为步进递加指针
 //这时 *p == 0x01; 
 如果定义 为: int *p;
 那p++;以后 p是以16位(2Byte)为步进递加指针的,这时*p == 0x0203(或者0x0302)

以上是粗略的一个例子,说法不是很精确,只是个大概意思
仔细看看书上的描述,你就会清楚很多。

使用特权

评论回复
5
biehoff|  楼主 | 2008-10-13 17:06 | 只看该作者

thanks

谢谢各位大侠 这下明白了  本人太菜 还要多努力  虽然学习和理解的办法很笨

使用特权

评论回复
6
sxggj| | 2008-10-14 09:00 | 只看该作者

看来我更菜了,谢谢大侠

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

138

帖子

0

粉丝