有如下一段代码,问结果是什么?

boge 2001-04-05 12:58:00
int a, b, c ;
int *p1 ;
char *p2 ;

a = 10 ;
b = 20 ;
c = 30 ;

p1 = &a ;
p1++ ;
p2 = (char*) p1 ;
p2++ ;
a = *(int*) p2 ;

问: a = ???
...全文
178 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saintking 2001-04-28
  • 打赏
  • 举报
回复
这个是当然的事,不过,如果一次来作为对c++重一些概念的理解,我觉得未尝不可。
但是,初学者,慎重阅读。
jucee 2001-04-27
  • 打赏
  • 举报
回复
a=30,应该是这样的,因为a,b,c分配的空间是连续的。
vochen 2001-04-27
  • 打赏
  • 举报
回复

不要去管什么由编译器决定的内存分配方式,那段程序本身就是有问题的,程序员应该坚决避免写出那样的程序!!!!!!!!!!!!

Saintking 2001-04-27
  • 打赏
  • 举报
回复
更正::::::::::::
xiaolizi(小李子) ::
对于vc编译器,是堆栈方式的
参照上面的内存分配(p2)xxxxxxxx(p1)xxxxxxxx(c)1e000000(b)14000000(c)0a000000

对不起,上面的内存分配有错,那时24位的。不过结果一样的
Saintking 2001-04-27
  • 打赏
  • 举报
回复
要更具编译器的情况来确定的

看注释


int a, b, c ;
int *p1 ;
char *p2 ;

a = 10 ;
b = 20 ;
c = 30 ;

p1 = &a ;
p1++ ; //p1向后移动了sizeof(int)字节,指向了b
p2 = (char*) p1 ; //此时的p2步长位sizeof(char) == 1
p2++ ; //p2向后移动了sizeof(char) == 1个字节
a = *(int*) p2 ; //他得值事b左移8位与c右移24位,也就是30了

但是,在vc编译器中,所有的变量是压栈的,所以,如果把++该为--可以得到(c)1e0000(b)140000(a)0a0000, 结果是 0x1400 == 5120 否则,是不可知的。

问: a = ???


xiaolizi(小李子) ::
int a, b, c ;
int *p1 ;
int *p2 ;

a = 10 ;
b = 20 ;
c = 30 ;

p1 = &c ;
p1++ ; //p1向后移动sizeof(int)个字节,在32位编译器上,就是p1* == p1
p2 = p1 ;
a = *p2 ; //此时,a = p1
p2++ ; //p2向后移动了sizeof(int)个字节,在32位编译器上,就是p2* == p2
a = *p2 ; //a 是p2的值,也就是p2的地址






huang_zhi_x 2001-04-25
  • 打赏
  • 举报
回复
我想是20的高字节和30的低字节.
a,b,c的地址应该是连续分配的.
Rammmui 2001-04-25
  • 打赏
  • 举报
回复
a为10?
ShowMan 2001-04-16
  • 打赏
  • 举报
回复
大家不会没有编译器吧!!
上几十一下不久行了.





softman_2000 2001-04-16
  • 打赏
  • 举报
回复
a 应该是30
leojay 2001-04-16
  • 打赏
  • 举报
回复
我把题目改一下:
int a, b, c ;
int *p1 ;
char *p2 ;

a = 10 ;
b = 20 ;
c = 30 ;

p1 = &c ;
p1++ ;
p2 = (char*) p1 ;
p2+=4;
a = *(int*) p2 ;
a是什么知道吗,它的原理可以解答xiaolizi(小李子)的问题.想一想。
hawkgao 2001-04-11
  • 打赏
  • 举报
回复
0
lang_82 2001-04-11
  • 打赏
  • 举报
回复
如果调试的话,a肯定是个怪数
xiaolizi 2001-04-08
  • 打赏
  • 举报
回复
啊! 我明白了。。。
看来指针真的没学好啊
xiaolizi 2001-04-08
  • 打赏
  • 举报
回复
真~奇~怪

int a, b, c ;
int *p1 ;
int *p2 ;

a = 10 ;
b = 20 ;
c = 30 ;

p1 = &c ;
p1++ ;
p2 = p1 ;
a = *p2 ;
p2++ ;
a = *p2 ;

当做完最后第二步 p2++后为什么p2所指的地址中的值还是20啊???
xycleo 2001-04-06
  • 打赏
  • 举报
回复
上机调试一下就知道拉!!应该是不确定!!!
pikaqiu 2001-04-06
  • 打赏
  • 举报
回复
怎...怎可以这样用之真的?简直是爆殄天物
binghuodao 2001-04-05
  • 打赏
  • 举报
回复
最好不要让指针乱跑,轻则结果错误,重则系统崩溃
Wingsun 2001-04-05
  • 打赏
  • 举报
回复
是啊,你的指针在p1++后就不知道指到哪儿去了.当然a就不确定了.
墨梅无痕 2001-04-05
  • 打赏
  • 举报
回复
不确定

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧