返回信息流今天调程序遇到一个打印输出的问题,有下面两个程序:
1、
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv)
{
int a[5]={1,2,3,4,5};
int *p2=(int *)(a+1);
printf("%x\n",*p2);
system("pause");
return 0;
}
2、
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv)
{
int a[5]={1,2,3,4,5};
int *p2=(int *)((int)a+1);
printf("%x\n",*p2);
system("pause");
return 0;
}
这两个程序的输出结果不同,第一个是2,第二个是2000000,另外在第二个程序里面a是数组首地址,也就是int *类型的,强制转换为int类型是何意?
静等大牛解答~~~~~~~~~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #35538同步于 2010/1/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助一个C语言问题
macrossdzh
2010/1/29镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
第二个就是直接地址+1
第一个是地址+了int的长度
其实可以自己看内存啊……
【 在 macrossdzh (心然的歌) 的大作中提到: 】
: 今天调程序遇到一个打印输出的问题,有下面两个程序:
: 1、
: #include <stdio.h>
: ...................
其实我觉得第一个不用(int *)也行吧……直接a+1应该加的就是一个int的长度……
【 在 renne (歼灭天使 玲) 的大作中提到: 】
: 第二个就是直接地址+1
: 第一个是地址+了int的长度
: 其实可以自己看内存啊……
: ...................
【 在 renne 的大作中提到: 】
: 第二个就是直接地址+1
: 第一个是地址+了int的长度
: 其实可以自己看内存啊……
请问为何第二个(int)a转换后后打印结果是2000000呢?