黑马程序员技术交流社区

标题: 下面这段代码为什么会运行出错?有关全局变量 [打印本页]

作者: 尾尾    时间: 2015-9-30 11:09
标题: 下面这段代码为什么会运行出错?有关全局变量
  1. //全局变量思考练习
  2. //定义全局变量时,数组没有初始化则都为0
  3. //定义局部变量时,数组没有初始化则都为垃圾数,除法部分初始化或者全部初始化

  4. //实现一个函数调用本身不会出现死递归的案例
  5. #include<stdio.h>
  6. int a=0;
  7. int add();
  8. int main(){
  9.     add();
  10.     return 0;
  11. }
  12. ////下面这为什么运行出错?
  13. int add(){
  14.     if(a<5)add();
  15.     printf("add调用第%d次\n",a);
  16.     a++;
  17.     return 0;
  18. }
复制代码

作者: 尾尾    时间: 2015-9-30 11:10
求各位大神指点
作者: RIDP    时间: 2015-9-30 13:15
虽然我没复制你的代码试运行,但是我记得
if函数后面跟条件之后有{}的吧?
if (条件) {
代码
}
你的{}没了- -
作者: Abuzzworld    时间: 2015-9-30 13:38
RIDP 发表于 2015-9-30 13:15
虽然我没复制你的代码试运行,但是我记得
if函数后面跟条件之后有{}的吧?
if (条件) {

只执行if判断后的一条语句的时候是可以不加{}的,加了{}表示执行括号内的所有语句
作者: RIDP    时间: 2015-9-30 15:40
Abuzzworld 发表于 2015-9-30 13:38
只执行if判断后的一条语句的时候是可以不加{}的,加了{}表示执行括号内的所有语句 ...

0.0哦!这个我倒是还真没有研究过,自己一般都是{}模式写着,哈哈,学习了
作者: liuhao_hm    时间: 2015-10-3 14:10
你这样调用会导致死循环的,你的a++根本执行不到
  1. #include<stdio.h>
  2. int a=0;
  3. int add();
  4. int main(){
  5.     add();
  6.     return 0;
  7. }
  8. ////下面这为什么运行出错?
  9. int add(){
  10.     if(a<5){
  11.         printf("add调用第%d次\n",a);
  12.         a++;
  13.         add();
  14.     }
  15.     return 0;
  16. }
复制代码

作者: HI奋斗    时间: 2015-10-3 15:34
对啊,你的if语句没有大括号,只能执行后面的一句语句,知道到之后又调用一个空函数,之后一直循环,不会往下进行,会造成无限循环。
作者: wwf707542865    时间: 2015-10-3 15:46
兄弟啊,你a都没开始做自增,前面就开始死循环了,将a++放到if前面去
作者: chensc    时间: 2015-10-4 07:23
学习学习!
作者: 洪吉童    时间: 2015-10-4 09:49
无限递归下去了,a永远是==0的
作者: Eric_h    时间: 2015-10-4 09:53
死循环了,没执行到printf ,也没执行到a++
作者: wxd123    时间: 2015-10-4 23:05
死循环,楼主加油!
作者: chensc    时间: 2015-10-5 06:59
学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2