CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

一个用指针做参数的WHILE是如何控制循环次数(有实例)

楼主sxrj()2003-08-02 04:20:52 在 C/C++ / C++ 语言 提问

我在做去年程序员试题的时候对他们使用的WHILE是如何控制循环次数的不太清楚,想请教一下大家:  
  main()  
  {   char   a[]={'a','b','c'};  
    char   b[]={'e','c','e'};  
    char   *a1;  
    int   n,   i,j=1;  
    a1=a;  
  /*n=sizeof(a);   printf("%d\n",n);     */  
        while(*a1!='\0')  
        {   printf("%d",j++);  
            for(i=0;i<3;i++)   printf("%c   ",a[i]);  
            printf("\n   ");  
            *a1++;   }  
  }  
  该程序运行结果如下:  
    1a   b   c  
    2a   b   c  
    3a   b   c  
    4a   b   c  
    5a   b   c  
    6a   b   c  
    7a   b   c  
    8a   b   c  
    9a   b   c  
  将/*n=sizeof(a);   printf("%d\n",n);     */的/*   */去掉并且同程序一同运行,结果如下:  
  3  
  1a   b   c  
    2a   b   c  
    3a   b   c  
    4a   b   c  
    5a   b   c  
    6a   b   c  
    7a   b   c  
  将char   b[]={'e','c','e'};行删除,运行结果如下:  
  3  
  1a   b   c  
    2a   b   c  
    3a   b   c  
  问题:为什么每次跳出   while(*a1!='\0')循环的次数都不一样?是什么参数被修改?是怎么被修改?  
  问题点数:5、回复次数:7Top

1 楼Yashmak(双层面纱)回复于 2003-08-02 05:46:50 得分 1

呵呵,常识性错误  
  没有设定字符串结尾的'\0'  
   
  Top

2 楼lonelyplanet(大地任我行)回复于 2003-08-02 06:00:01 得分 3

1)   *a1!='\0'是while循环执行的条件,就是说*al=='\0'是循环终止  
  2)   在这里*al++与al++意思一样(因为++运算符优先级高于*运算符),表示指针加一,即指向下一位置。最初al指向a[0],循环中随al++依次指向a[1],a[2]...  
  3)   问题来了,为什么循环终止不确定呢?我们来看看*a1=='\0'何时成立,也即i等于多少时a[i]=='\0'能成立。答案是"不确定",因为我们没有显示地把'\0'放在什么地方,也就是说程序是找着看,找到'\0'就终止循环,找不到就接着找。至于循环次数的变化是与当前堆栈中数据有关。  
  4)   把 char   a[]={'a','b','c'};  
        改成  
  char   a[]={'a','b','c',   '\0'};  
        试试看。  
  5)   罗嗦了这么多,其实dubug一下,看看al变化的情况就清楚了。Top

3 楼sxrj()回复于 2003-08-03 02:25:50 得分 0

经过运行,您说的是正确的,不知道各位高手还有没有不同的看法?谢谢了。Top

4 楼williamVII(spread)回复于 2003-08-04 14:03:34 得分 0

偶来复习一下古老的C,Top

5 楼FinalInches(无色枫叶)回复于 2003-08-07 23:57:46 得分 1

只要在赋值的时候改为  
        char   a[]="abc";  
    它会自动在最后加入一个表示结束的符号“\0”!!!Top

6 楼sxrj()回复于 2003-08-10 10:23:22 得分 0

我是一个初学者,我不知道这分可以分给几个人吗,如果不可以大家觉得我应当给谁最合适?  
  Top

7 楼sxrj()回复于 2003-08-10 19:49:52 得分 0

欢迎讨论。Top

相关问题

  • 一个简单问题,如何将消息参数中的句柄转换为该对象实例指针
  • 指针参数问题
  • 指针参数问题
  • 帮写个指针循环
  • 字符指针参数的使用?
  • 关于指针参数(链表节点)
  • 指针参数的小问题?
  • 指针传递参数的问题,HELP
  • 关于指针参数的问题
  • 问一个指针参数的问题?

关键词

  • 循环
  • 控制
  • 循环次数
  • while是如何控制
  • printf
  • char

得分解答快速导航

  • 帖主:sxrj
  • Yashmak
  • lonelyplanet
  • FinalInches

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo