关于指针的一个问题
*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;
这两者是等价的吧?
一个个来:
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;
答:这两句话是等价的(麻烦把代码写对,前面漏了#号,后面多了;号),为什么对?
宏就是替换的作用,上面两种写法就是把代码放在不同地方而已,并没有什么不同。
最后,以上解答均经过验证。有疑问随时反馈。
个人观点、:1 ()是一个类型强制转换运算符,意思是将0x20000000强制转换成指针类型。
2 第一种写法好像没见过,应该是错误的,第二种应该是正确的
3 不等价,第一种写法是正确的,第二种写法是错误的,
(unsigned long*)0x20000000;
*0x20000000=2;
这样赋值是正确的吧?
你给我解释下你为什么觉得正确
我是把0x20000000类似于这样
int *p;
*p=2;
不懂0x20000000 和指针一起搭配的用法
我是把0x20000000类似于这样
int *p;
*p=2;
不懂0x20000000 和指针一起搭配的用法
我是把0x20000000类似于这样
int *p;
*p=2;
不懂0x20000000 和指针一起搭配的用法
0x20000000只是一个立即数,而你说的int *p;这句代码中的p是个指针,这两个不是等价的,如果要等价就要按照之前提到过的进行强制类型转换,就比如转换为(int *)0x20000000,这样就和int *p一样都是指针了。
可能会有点绕,自己多多体会就懂了
学习