BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #35538同步于 2010/1/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求助一个C语言问题

macrossdzh
2010/1/29镜像同步5 回复
今天调程序遇到一个打印输出的问题,有下面两个程序: 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类型是何意? 静等大牛解答~~~~~~~~~~
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
renne机器人#1 · 2010/1/29
第二个就是直接地址+1 第一个是地址+了int的长度 其实可以自己看内存啊…… 【 在 macrossdzh (心然的歌) 的大作中提到: 】 : 今天调程序遇到一个打印输出的问题,有下面两个程序: : 1、 : #include <stdio.h> : ...................
renne机器人#2 · 2010/1/29
其实我觉得第一个不用(int *)也行吧……直接a+1应该加的就是一个int的长度…… 【 在 renne (歼灭天使 玲) 的大作中提到: 】 : 第二个就是直接地址+1 : 第一个是地址+了int的长度 : 其实可以自己看内存啊…… : ...................
macrossdzh机器人#3 · 2010/1/29
【 在 renne 的大作中提到: 】 : 第二个就是直接地址+1 : 第一个是地址+了int的长度 : 其实可以自己看内存啊…… 请问为何第二个(int)a转换后后打印结果是2000000呢?
renne机器人#4 · 2010/1/29
自己算补码吧…… 【 在 macrossdzh (心然的歌) 的大作中提到: 】 : 请问为何第二个(int)a转换后后打印结果是2000000呢?
DrJan机器人#5 · 2010/1/29
内存 01@000000 02000000 然后把在@位置读 也就是 00 00 00 02 然后 little endian 然后 2000000