亚信联创笔试题

jingsuxuyilq 2011-10-04 07:43:16
#include<iostream>
using namespace std;
int main()
{
int b=0;
int a[5]={0,1,2,3,4};
for(int i=0;i<5;)
{
i=a[i+1];
cout<<a[i]<<endl;
}
return 0;
}
输出是什么?
我在VC6.0上运行是死循环,一直输出0 1 2 3 4 0 1 2 3 4...
然后我改了下这个程序变为
#include<iostream>
using namespace std;
int main()
{
int b=0;
int a[5]={0,1,2,3,4};
/*for(int i=0;i<5;)
{
i=a[i+1];
cout<<a[i]<<endl;
}*/
for(int i=0;i<5;i++)
cout<<&a[i]<<" ";
cout<<&a[5];
cout<<endl;
cout<<&b<<endl;
return 0;
}
在我的机子上输出的地址为
0012FF68 0012FF6C 0012FF70 0012FF74 0012FF78 0012FF7C
0012FF7C
Press any key to continue
即A[5]的地址和b的地址是一样的,这是为什么?
请高手赐教
...全文
1644 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣渡江 2012-08-17
  • 打赏
  • 举报
回复
我用Microsoft Visual C++ 2008 Express Edition编译
#include<iostream>
using namespace std;
int main()
{
int b=0;
int a[5] = {0,1,2,3,4};
/*for(int i=0; i<5;)
{
i = a[i+1];
cout<<a[i]<<endl;
}*/
for(int i=0;i<5;i++)
{
cout<<&a[i]<<endl;
}
cout<< &b<<endl;
cout<< &a[5]<<endl;
return 0;
}

结果为什么a[5]的地址和b的地址不一样呢?结果如下
0037FA54
0037FA58
0037FA5C
0037FA60
0037FA64
0037FA70
0037FA68
gaoxinbin 2012-06-13
  • 打赏
  • 举报
回复
楼上的高手们,可以加下QQ嘛
咨询一下技术方面的问题
我的QQ :819077957
hrhy256 2011-10-05
  • 打赏
  • 举报
回复
学习了,一下都没看出问题是什么
xiaoshang_program 2011-10-05
  • 打赏
  • 举报
回复
............. 看看指针

数组越界

亚信 迁入那个公司 培训也有把
iamnobody 2011-10-04
  • 打赏
  • 举报
回复
SB题目,行为错误,结果未定义。
5t4rk 2011-10-04
  • 打赏
  • 举报
回复
其实楼主你自己去调试一下程序

查看内存 跟踪变量

了解一下内存的管理方式

就会明白的

5t4rk 2011-10-04
  • 打赏
  • 举报
回复
楼主这个题

公司应该考察的是你对变量在栈的存储结构的认识

栈的结构是往下面地址越高 往上面地址越低

所以楼主的b变量在下面 也就是地址先申请到的

然后接着为数组 a[5]分配空间

其实a[5]的地址就是b的地址


所以为什么会循环就不解释了啊 自己想想 呵呵
liuyufeng1 2011-10-04
  • 打赏
  • 举报
回复
我这个编译器上是直接出错,明显一到a[5]程序就SB了
mengmingtao 2011-10-04
  • 打赏
  • 举报
回复
就是程序为变量分配空间的时候,先分配了
a、后分配了b。a[5]对a来说是越界了,下一个是b所以自然跟b一样了~

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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