以前做的一道wipro公司笔试题!

leecyz 2010-03-02 09:33:28
#include <stdio.h>

main()
{
int a[] = {2};
int *p;
p=a;

while(*p != 0)
{

p++;
printf("%d\n",p-a);
}

getch();
}

谁知道怎么解的说下,现在还没想出来。
反正有点偏门,应该很多地方都能见到这个题。
...全文
364 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
vincent_1011 2010-03-03
  • 打赏
  • 举报
回复
引用 18 楼 leaveboy 的回复:
数组下标越界,访问未知地址数据产生的问题!出题者的意图应该是让程序员明白:数组使用时明确的告诉下标以防备读取未知数据而产生的bug!

程序执行结果里有一点不解:p-a!=p:2293628-a:2293620的值

指针相差是算相距几个元素的
leemeng0x61 2010-03-03
  • 打赏
  • 举报
回复
数组下标越界,访问未知地址数据产生的问题!出题者的意图应该是让程序员明白:数组使用时明确的告诉下标以防备读取未知数据而产生的bug!

程序执行结果里有一点不解:p-a!=p:2293628-a:2293620的值
vincent_1011 2010-03-03
  • 打赏
  • 举报
回复
这东西没意思。上面竟然还有人说是有规律的,笑,我还特意跑了下

deubg执行的时候输出1-16
release的时候输出1-15
调试执行的时候只有1-6

vc6 ,xp环境

无聊
leemeng0x61 2010-03-03
  • 打赏
  • 举报
回复
#include <stdio.h> 

int main()
{

int a[] = {2};
int i=0;
int *p;
p=a;

while(*p != 0)
{

p++;

printf("p-a:%d,a:%d,a[0]:%d,p:%d,*p:%d\n",p-a,a,a[0],p,*p);
// p++;
i++;
}

system("pause");
return 0;
}

p-a:1,a:2293620,a[0]:2,p:2293624,*p:2293680
p-a:2,a:2293620,a[0]:2,p:2293628,*p:4198887
p-a:3,a:2293620,a[0]:2,p:2293632,*p:1
p-a:4,a:2293620,a[0]:2,p:2293636,*p:4007048
p-a:5,a:2293620,a[0]:2,p:2293640,*p:4008400
p-a:6,a:2293620,a[0]:2,p:2293644,*p:4210688
p-a:7,a:2293620,a[0]:2,p:2293648,*p:2293668
p-a:8,a:2293620,a[0]:2,p:2293652,*p:-1
p-a:9,a:2293620,a[0]:2,p:2293656,*p:2293672
p-a:10,a:2293620,a[0]:2,p:2293660,*p:1
p-a:11,a:2293620,a[0]:2,p:2293664,*p:6
p-a:12,a:2293620,a[0]:2,p:2293668,*p:4008400
p-a:13,a:2293620,a[0]:2,p:2293672,*p:0
请按任意键继续. . .
onthebox 2010-03-03
  • 打赏
  • 举报
回复
恩,我的linux只到13
hahaliu007 2010-03-03
  • 打赏
  • 举报
回复
学习学习~~~~~~~~~~~~~~~~~~~~~~~~~
ForestDB 2010-03-03
  • 打赏
  • 举报
回复
顺便说下,我在Linux下又出现过18的结果。
ForestDB 2010-03-03
  • 打赏
  • 举报
回复
沿着栈往“上”走,碰到“0”即停止。
栈往上都是什么呢?函数调用的压栈。
cqsfd 2010-03-03
  • 打赏
  • 举报
回复
不懂,好久没写C++了
进来学习
ProgBelief 2010-03-03
  • 打赏
  • 举报
回复
越界访问,直到遇到 \0 ,所以值不确定
地下室小红叔 2010-03-03
  • 打赏
  • 举报
回复
嗯 和我判断的一样 看来我C++也有一定功底呵呵~
bobo364 2010-03-03
  • 打赏
  • 举报
回复
数组下标越界,访问未知地址数据产生的问题!出题者的意图应该是让程序员明白:数组使用时明确的告诉下标以防备读取未知数据而产生的bug! 程序执行结果里有一点不解:p-a!=p:2293628-a:2293620的值

最终的值不确定,你并不知道指针p所指的值何时会等于0,所以p-a也就不确定了
bladesoft 2010-03-03
  • 打赏
  • 举报
回复
1到8,gcc下编的
正好数组结束就退出循环了。
做好这道题目,要对编译器特点非常了解,我也不是十分了解。
preciousboy 2010-03-03
  • 打赏
  • 举报
回复
我跑的结果是1到10;见鬼了
preciousboy 2010-03-03
  • 打赏
  • 举报
回复
学习ing 回复内容太短!
chizhaolin 2010-03-03
  • 打赏
  • 举报
回复
27楼,打广告的?
回复内容太短!
leecyz 2010-03-02
  • 打赏
  • 举报
回复
我还是不理解。
我想知道结果为什么会是1到16
gaslinux 2010-03-02
  • 打赏
  • 举报
回复
引用 12 楼 leecyz 的回复:
引用 10 楼 gaslinux 的回复:引用 8 楼 leecyz 的回复:32位机中:答案 1到16. 16位机种 1到8. 不知道为什么,反正内存后面不是随机分配,有一定规律。应该与汇编或更底层有关。 这个可是不一定的。

你用编译器运行下,看每次是不是一样的 。


这个是和平台有关的,在一个平台上可能是一样的,不同的平台就不一样了。
musiclee 2010-03-02
  • 打赏
  • 举报
回复
我的表达能力太差 lz字节看代码吧

int main()
{

int a[] = {2};
int i=0;
int *p;
p=a;

while(*p != 0)
{

p++;
printf("%d,打印当前的地址=%p,打印当前地址中存放的int内容=%d\n",p-a,p,*p);
}

getchar();
return 0;
}
leecyz 2010-03-02
  • 打赏
  • 举报
回复
引用 10 楼 gaslinux 的回复:
引用 8 楼 leecyz 的回复:32位机中:答案 1到16. 16位机种 1到8. 不知道为什么,反正内存后面不是随机分配,有一定规律。应该与汇编或更底层有关。

这个可是不一定的。


你用编译器运行下,看每次是不是一样的 。
加载更多回复(11)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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