栈实现代码2 bool is full(void) f return top =STACK_SIZE; } void push(int i) if (is_full()) stack_overflow(); else contents[top++]i; ) int pop(void) if (is_empty()) stack_underflow(); else return contents[--top]; ) 21
栈实现代码 2 21 bool is_full (void ) { return top == STACK_SIZE; } void push(int i ) { if (is_full()) stack_overflow(); else contents[top++] = i ; } int pop(void ) { if (is_empty()) stack_underflow(); else return contents[--top]; }
外部变量的优缺点1 当很多函数共享少数变量时,或者少数函数需 要共享大量变量时,外部变量很方便 ■但在大多数情况下,函数间的通信应该采用参 数传递范式,否则: 必如果在维护程序时修改了外部变量,则需要检查所 有使用了该变量的函数以确认改变不会造成问题 必如果外部变量被赋值为一个不正确的值,很难找到 该赋值的始作俑者 ·依赖于外部变量的函数很难在其它程序中重用 22
外部变量的优缺点1 当很多函数共享少数变量时,或者少数函数需 要共享大量变量时,外部变量很方便 但在大多数情况下,函数间的通信应该采用参 数传递范式,否则: 如果在维护程序时修改了外部变量,则需要检查所 有使用了该变量的函数以确认改变不会造成问题 如果外部变量被赋值为一个不正确的值,很难找到 该赋值的始作俑者 依赖于外部变量的函数很难在其它程序中重用 22
外部变量的优缺点2 不要在不同的函数中因为不同的目的而使用相 同的外部变量 个别程序员将,j之类的变量声明为外部变量,以方 便在for循环中使用 这种做法不可取,因为将声明称外部变量,多个 函数使用,暗示多个函数间的是有联系的 ■外部变量一定要起有意义的名字,局部变量则 不然,因为有时很难为for循环的控制变量想到 比更好的名字 23
外部变量的优缺点2 不要在不同的函数中因为不同的目的而使用相 同的外部变量 个别程序员将i, j之类的变量声明为外部变量,以方 便在for循环中使用 这种做法不可取,因为将i声明称外部变量,多个 函数使用,暗示多个函数间的i是有联系的 外部变量一定要起有意义的名字,局部变量则 不然,因为有时很难为for循环的控制变量想到 比i更好的名字 23
外部变量的优缺点3 把本来需要声明为局部变量的变量声明为全局变量 会带来难以跟踪的Bug int i; void print_one_row(void) for(i=1;i<=10;++) printf("*"); ) void print_all_rows(void) for(i=1;i<=10;i++) { print_one_row(); printf("\n"); 上述代码不会打印10行,只会打印一行 24
外部变量的优缺点3 把本来需要声明为局部变量的变量声明为全局变量 会带来难以跟踪的Bug 上述代码不会打印10行,只会打印一行 24 int i; void print_one_row(void) { for (i = 1; i <= 10; i++) printf("*"); } void print_all_rows(void) { for (i = 1; i <= 10; i++) { print_one_row(); printf("\n"); } }
示例:猜数程序 生成一个1到100之间的随机数,给用户几次机会来猜 该数是多少 运行场景: Guess the secret number between 1 and 100. A new number has been chosen. Enter guess:55 Too low; try again. Enter guess:6 65 Too high; try again. Enter guess:60 Too high; try again. Enter guess:58 You won in 4 guesses!... 25
示例:猜数程序 生成一个1到100之间的随机数,给用户几次机会来猜 该数是多少 运行场景: 25 Guess the secret number between 1 and 100. A new number has been chosen. Enter guess: 55 Too low; try again. Enter guess: 65 Too high; try again. Enter guess: 60 Too high; try again. Enter guess: 58 You won in 4 guesses!