求教:指针的问题

[复制链接]
2639|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搂所说完全正确。
xyz769 发表于 2011-12-12 08:58 | 显示全部楼层
补充一下,还要考虑大小端。3楼的说法只在小端模式下是正确的,在大端模式下,比如双字节INT,则结果是 0x1000
lee_木子 发表于 2011-12-13 17:00 | 显示全部楼层
编译后验证一下就知道了 实验才能验证你的想法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部