打印

求教:指针的问题

[复制链接]
1268|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhutoulisz|  楼主 | 2011-12-11 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stdafx.h"
int main(int argc, char* argv[])
{  
int a[4]={1,2,3,4};
int *p=(int *)((int)a+1);
     
printf("%x\n",*p);
return 0;
}

我想问一下,在这里,(int)a +1,表示的含义? 我想,a强制转化位int 型,就改变了a以前的类型,所以在这里就相当于一个整型输+1,可是a的只有为多少呢?疑惑中~~,望指教

相关帖子

沙发
zhutoulisz|  楼主 | 2011-12-11 16:02 | 只看该作者
:(

使用特权

评论回复
板凳
chenbb8| | 2011-12-11 17:44 | 只看该作者
32位的还是8位的,就以8位AVR来说吧
int是双字节的
所以(int)a +1里,(int)就是将指针的地址当作int变量使用,因此+1就是低位等于a[0]的高8位,高位就入侵到了a[1]的低8位,因此输出0x200;
32位上位机的话就是0x2000000;

使用特权

评论回复
地板
sjl2006| | 2011-12-11 18:47 | 只看该作者
我要纠正一下LZ,数组名a是常量,类型是int *,改不了的,被(int)a修改的只是CPU寄存器中的那个中间数值&a所表示的类型。3搂所说完全正确。

使用特权

评论回复
5
xyz769| | 2011-12-12 08:58 | 只看该作者
补充一下,还要考虑大小端。3楼的说法只在小端模式下是正确的,在大端模式下,比如双字节INT,则结果是 0x1000

使用特权

评论回复
6
lee_木子| | 2011-12-13 17:00 | 只看该作者
编译后验证一下就知道了 实验才能验证你的想法

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

0

粉丝