LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 876|回复: 7

关于指针的一个用法!!请教!!

[复制链接]
发表于 2007-3-30 19:01:40 | 显示全部楼层 |阅读模式
定义有一个指针: volatile unsigned int  *RegPtr;

然后 RegPtr = (volatile unsigned int  *)0x20041140;/*指向一固定的内存地址*/

再然后 : RegPtr[4] = 0;


请问下,怎么变成RegPtr[4]的数组了,那么RegPtr[1]的值和RegPtr[0]的值有可能是多少?

指针怎么能用作数组的??
发表于 2007-3-31 00:22:45 | 显示全部楼层
是不是0x20041140往后偏移4个unsigned int的意思
回复 支持 反对

使用道具 举报

发表于 2007-3-31 00:43:50 | 显示全部楼层
指针和数组在C和C++里面几乎是等价的。
你这样做其实很危险,除非你知道自己在什么,LZ是不是在搞单片机或者驱动开发之类的东西啊?

RegPtr[0] == *RegPtr
RegPtr[1] == *(RegPtr+1)
RegPtr[2] == *(RegPtr+2)
RegPtr[3] == *(RegPtr+3)
RegPtr[4] == *(RegPtr+4)

数组下标每加一,也就是在一块连续的内存里面每次后移sizeof (unsigned int)那么多byte
回复 支持 反对

使用道具 举报

发表于 2007-3-31 00:44:07 | 显示全部楼层
根据指针类型和名字volatile unsigned int *RegPtr,我猜里面的值是寄存器的值
回复 支持 反对

使用道具 举报

发表于 2007-3-31 00:46:44 | 显示全部楼层
Post by Fixend
指针和数组在C和C++里面几乎是等价的。
你这样做其实很危险,除非你知道自己在什么,LZ是不是在搞单片机或者驱动开发之类的东西啊?

RegPtr[0] == *RegPtr
RegPtr[1] == *(RegPtr+1)
RegPtr[2] == *(RegPtr+2)
RegPtr[3] == *(RegPtr+3)
RegPtr[4] == *(RegPtr+4)

数组下标每加一,也就是在一块连续的内存里面每次后移sizeof (unsigned int)那么多byte


对,貌似操作寄存器应该是内核代码的事情,不应该应用做得
回复 支持 反对

使用道具 举报

发表于 2007-3-31 01:29:47 | 显示全部楼层
Post by 1ball
对,貌似操作寄存器应该是内核代码的事情,不应该应用做得
做单片机/嵌入开发,楼主提到的这种方式是经常遇到了。不过如果写成如下的方式会容易懂些:
-----------
尽量不要在代码中使用magic number
  1. /* in header file */
  2. /* Register address */
  3. #define   REG_BASE         0x20041140
  4. #define   REG_CTRL_MODE   (REG_BASE + 0 * sizeof(int))
  5. #define   REG_BUFF_MODE   (REG_BASE + 1 * sizeof(int))
  6. #define   REG_WR_MODE     (REG_BASE + 2 * sizeof(int))
  7. #define   REG_RD_MODE     (REG_BASE + 3 * sizeof(int))
  8. typedef enum WR_MODE_enum
  9. {
  10.     WR_DISABLE = 0,
  11.     WR_OVERWRITE,
  12.     WR_APPEND
  13. } WR_MODE_E;
  14. /* in c file */
  15. volatile unsigned int *RegPtr;
  16. RegPtr  = (volatile unsigned int *)REG_WR_MODE;
  17. *RegPtr = WR_DISABLE;
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-2 11:19:44 | 显示全部楼层
谢谢大家,目前是在做一个驱动开发的项目,不确定这样做是否能保证代码的安全性?
回复 支持 反对

使用道具 举报

发表于 2007-4-10 21:40:58 | 显示全部楼层
C中指针确实可以当数组用,关于安全性,就要自己来掌握了,因为即使是C的数组也不是安全的,它同样不检查有效范围
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表