这是什么问题啊!

blldw 2001-07-14 10:59:23
#include<stdio.h>
int int_values[]={5,7,3,9,4};
void main()
{
int *ptr;
while(*ptr)
printf("%d\n",*(ptr++));
}

运行结果:
5
7
3
9
4
25637
10

请说明这是什么问题啊!
...全文
137 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
blldw 2001-07-18
  • 打赏
  • 举报
回复
DDD
blldw 2001-07-17
  • 打赏
  • 举报
回复
寒鹏说的对,我丢了一行:int *ptr=int_values;
谢谢大家!
yug 2001-07-16
  • 打赏
  • 举报
回复
不可能嘛,ptr连初值都没有,怎么可能输出什么5,7,3,9,...,呵呵
程序可能是这样吧:#include<stdio.h>
int int_values[]={5,7,3,9,4};
void main()
{
int *ptr=int_value;
while(*ptr)
printf("%d\n",*(ptr++));
}

循环while(*ptr)printf("%d\n",*(ptr++));在*ptr=0时终止。
int_value后的内存空间里当然是一些乱七八糟的数了,只有碰巧遇到一个(int)0才会停下来。
程序可以这样改一下:
int int_values[]={5,7,3,9,4,0};


lxas 2001-07-16
  • 打赏
  • 举报
回复
这两个值是从随机地址中抽取的,也就是说是随机地址中所储存的值。也正如kmzwm(艾泥)所说当ptr指向的地址为0时循环停止。你的程序我运行的结果是:
767
1147
然后就停止循环了,也就是说在ptr找到这两个值的地址以后指向了0。所以循环停止。
blldw 2001-07-16
  • 打赏
  • 举报
回复
谢谢大家的回答
但是,正如lxas所说,如果ptr指向数组以外的范围,为什么回出现两个出乎意料的值呢?
Chice_wxg 2001-07-15
  • 打赏
  • 举报
回复
同意
Leemaasn 2001-07-15
  • 打赏
  • 举报
回复
up
kmzwm 2001-07-14
  • 打赏
  • 举报
回复
ptr必须指向明确的地址。此程序实际上输出的是一些随机数据。
当ptr指向的地址内容为0时,退出循环。如果你多运行几次程序,
每次结果都不一样。

lxas 2001-07-14
  • 打赏
  • 举报
回复
因为你的指针没有初始化,这样*ptr就随机的指向其他地址。如果这个地址已经有东西存放在里面就打印地址这个值。当*ptr不断加一,指向了数组范围以外所以打印一个25637。
可能解释得不是很对,大概就是这个意思吧!

70,022

社区成员

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

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