关于C语言中给绝对地址的赋值问题

看到很多资料中的给绝对地址赋值是这样的:(unsigned int *)0x100000 = 0x3322;

但是我理解为unsigned int *只是是把地址0x100000转换为unsigned int *的指针类型,对其赋值是把0x3322赋给了该地址,并没有赋给该地址指向的内容。

我感觉应该是这样:*((unsigned int *)0x100000) = 0x3322,求高手给出正确解答!谢谢!

您说的应该是对的,用VC的话前面那条语句是编译不通过的。

补充啊,谈点个人看法:
虽然在VC上面编译不能通过(unsigned int *)0x100000 = 0x3322语句,但是个人认为这条语句与*((unsigned int *)0x100000) = 0x3322所表达的含义是不同的。前者是对指针赋值,后者是对指针所指向的对象赋值。
1. 从变量的定义出发,变量是地址空间的别名,也即例如unsigned int *a表示给一个存储空间命名为a同时这个空间是一个地址指针,假设这个存储空间的地址为0x100000,那么此时a即是地址0x100000单元的别名,对a赋值即是对0x100000所标识的空间赋值。因此(unsigned int *)0x100000 = 0x3322赋值的空间是0x100000。
2. 对于*((unsigned int *)0x100000) = 0x3322语句,也即相当于*a = 0x3322,也即是a所指向的空间被赋值。也即是先取出0x100000地址空间的值作为地址找到对应的存储空间然后存储0x3322。

个人的一点浅见,不知道是否符合真实情况。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-19
你说的很对,完全正确。看来你对基础概念理解的很透。类型转换的结果不是左值,因此不能够被赋值。
不妨说一下“左值”的概念。简单说就是语法上能够放在赋值表达式的左边的表达式对象,左值表达式都有唯一确切的类型和内容的内存对象。变量名、结构成员、数组元素、指针等可以作为左值。只有左值能被赋值,具有const属性不可以被赋值。本回答被提问者采纳
第2个回答  2013-02-19
你这个表达式(unsigned int *)0x100000 = 0x3322是错误的,不存在这种写法
* 这个符号,只能对变量使用,
还有等号左边,类型转换是非法的
第3个回答  2013-02-19
你的想法是对的。不知道你在哪看的资料,资料上的不对,左值为常量,不能赋值。
第4个回答  2013-02-19
围观...zhong
相似回答