,对0x67A9绝对地址赋值. 如下貌似是标准答案.我的理解是ptr肯定是一个地址,并且地址的值是0x67A9.
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa55;
问题是, 为什么0x67A9前面还要加(int *).
我觉得ptr = int 0xaa55;不就可以了吗?
原来有开贴过,不小点错按钮,实际还是没结局,求高人解释....
原地址:http://wenwen.sogou.com/z/q742660565.htm?sort=6#answer-1627974948
C语言面试题 绝对地址赋值问题
答案:3 悬赏:70
解决时间 2021-03-01 07:44
- 提问者网友:一人心
- 2021-02-28 18:40
最佳答案
- 二级知识专家网友:气场征服一切
- 2021-02-28 19:20
因为ptr是 int * 类型的。表示指向int型数据的一个指针。
ptr = (int *)0x67a9 表示将0x67a9强制转换成存放int型数据的地址,再把这个地址赋值给ptr。
()里加数据类型是强制转换类型的意思
ptr = int 0xaa55;
这个写法应该是不合法的
即使改成 ptr =( int )0xaa55; 也不对,因为左边是地址,右边是int型数据。数据类型不对等。
可以改成 * ptr = (int) 0xaa55;就对了,,这样两边数据类型对等,都是一个int型的数值了
ptr = (int *)0x67a9 表示将0x67a9强制转换成存放int型数据的地址,再把这个地址赋值给ptr。
()里加数据类型是强制转换类型的意思
ptr = int 0xaa55;
这个写法应该是不合法的
即使改成 ptr =( int )0xaa55; 也不对,因为左边是地址,右边是int型数据。数据类型不对等。
可以改成 * ptr = (int) 0xaa55;就对了,,这样两边数据类型对等,都是一个int型的数值了
全部回答
- 1楼网友:星痕之殇
- 2021-02-28 21:42
你说的很对,完全正确。看来你对基础概念理解的很透。类型转换的结果不是左值,因此不能够被赋值。
不妨说一下“左值”的概念。简单说就是语法上能够放在赋值表达式的左边的表达式对象,左值表达式都有唯一确切的类型和内容的内存对象。变量名、结构成员、数组元素、指针等可以作为左值。只有左值能被赋值,具有const属性不可以被赋值。
- 2楼网友:初心未变
- 2021-02-28 20:49
如果直接ptr=0xaa55,由于0xaa55是个整数常量,类型不匹配(事实上无法编译)。
所以要强制转换成匹配的类型,告诉编译器,0xaa55是个整数变量的地址。
另外你后面的代码 *ptr=0xaa55;是错误的,是将0xaa55保存到ptr的值所指向的地址,而ptr的值未初始化,里面的地址是不确定的,会引起程序崩溃。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯