关于指针的一个问题

2019-07-15 11:33发布

1、(unsigned long*)0x20000000;这个语句指的是什么意思?是把0x20000000定义成指针吗?
*0x20000000=2,表示的是将2放到0x20000000这个地址中?
2、(unsigned long*)0x20000000=2;这个赋值是错误的吧?
  *(unsigned long*)0x20000000=2 这样赋值是正确的吧?
3、define  P(unsigned long*)0x20000000 ;
     *P=2;

Define P *(unsigned long*)0x20000000;
      P=2;
这两者是等价的吧?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
大熊现在很幸福
1楼-- · 2019-07-15 13:13
一个个来:
1 (unsigned long*)0x20000000;这个语句指的是什么意思?是把0x20000000定义成指针吗?
*0x20000000=2,表示的是将2放到0x20000000这个地址中?
答:(unsigned long*)0x20000000的意思,和楼上意见一致,就是强制类型转换,将0x20000000强制转换为指针,至于
*0x20000000=2,首先这个写法就是错误的,就算理解为将2放到0x20000000这个地址中,但是对于指向0x20000000这个地址的指针类型并没有指定,所以这个写法有问题,如果写为:*(unsigned long*)0x20000000 = 2;这就和过程说的那个意思一致了。

2(unsigned long*)0x20000000=2;这个赋值是错误的吧?
  *(unsigned long*)0x20000000=2 这样赋值是正确的吧?
答:(unsigned long*)0x20000000=2;这个赋值的确是错误的,为什么错误,1中已经说过(unsigned long*)0x20000000是将0x20000000强制类型转换为指针,这里的这句代码在字面理解就是讲刚刚强制转换的一个指向0x20000000的指针转换为一个指向地址为0x2的地址的指针。这个是不允许的。
那么这句代码要怎么样就对了呢?改为 *(unsigned long*)0x20000000=2;就对了,为什么对?
刚才说了(unsigned long*)0x20000000已经相当于一个指针了,通过*号取指针指向地址的值就可以进行操作该地址处的数据了。

3 define  P(unsigned long*)0x20000000 ;
     *P=2;

Define P *(unsigned long*)0x20000000;
      P=2;
答:这两句话是等价的(麻烦把代码写对,前面漏了#号,后面多了;号),为什么对?
宏就是替换的作用,上面两种写法就是把代码放在不同地方而已,并没有什么不同。

最后,以上解答均经过验证。有疑问随时反馈。 最佳答案
辉仔
2楼-- · 2019-07-15 18:45
 精彩回答 2  元偷偷看……
Mr_RMS
3楼-- · 2019-07-15 22:07
大熊现在很幸福 发表于 2017-3-29 10:58
一个个来:
1 (unsigned long*)0x20000000;这个语句指的是什么意思?是把0x20000000定义成指针吗?
*0x20000000=2,表示的是将2放到0x20000000这个地址中?

(unsigned long*)0x20000000;
*0x20000000=2;
这样赋值是正确的吧?
大熊现在很幸福
4楼-- · 2019-07-16 01:30
Mr_RMS 发表于 2017-3-30 15:55
(unsigned long*)0x20000000;
*0x20000000=2;
这样赋值是正确的吧?

你给我解释下你为什么觉得正确
Mr_RMS
5楼-- · 2019-07-16 03:01
大熊现在很幸福 发表于 2017-3-30 17:25
你给我解释下你为什么觉得正确

我是把0x20000000类似于这样
int *p;
*p=2;
不懂0x20000000 和指针一起搭配的用法
Mr_RMS
6楼-- · 2019-07-16 04:38
大熊现在很幸福 发表于 2017-3-30 17:25
你给我解释下你为什么觉得正确

我是把0x20000000类似于这样
int *p;
*p=2;
不懂0x20000000 和指针一起搭配的用法

一周热门 更多>