c语言中,栈的运用
栈的其中一个作用:
在一个程序在运行之后就会开辟出一个栈的空间,在这个空间里,有函数在里面,函数的执行顺序按照代码的书写顺序,一个函数执行完之后就会弹栈,轮到下一个函数执行。在这里有一个例子,result函数,它虽然没有参数,但是前面函数执行后,前面的变量会保存数值,然后这个数值就可以在这个函数中运用,这样这个函数就在这个程序中发挥作用,输出返回值。
1. 函数的返回地址和参数
栈保存了一个函数调用时所需要的维护信息,可能和搭载另一个函数的栈一起返回函数的返回值(下面有一个例子)
#include <stdio.h>
#define N 5
int get_input(int number1, char opt, int number2);
int check_answer(int number1, char opt, int number2, int input);
void result();
int main()
{
int number1[N] = {36, 23, 47, 7, 19};
int number2[N] = {25, 8, 29, 16, 6};
char opt[N] = {'+', '-', '-', '+', '+'};
int is_right[N]; // 0:回答错误,1:回答正确
int input[N];
int i;
for(i = 0;i < 5;i++){
printf("第%d题:", i + 1);
input[i] = get_input(number1[i], opt[i], number2[i]);
is_right[i] = check_answer(number1[i], opt[i], number2[i], input[i]);
result();
}
return 0;
}
int get_input(int number1, char opt, int number2)
{
int input;
printf("%d %c %d = ", number1, opt, number2);
scanf("%d", &input);
return input;
}
int check_answer(int number1, char opt, int number2, int input)
{
int is_right = 0; // 0:回答错误,1:回答正确
if(opt == '+'){
if(input == (number1 + number2)){
is_right = 1;
}
}else{
if(input == (number1 - number2)){
is_right = 1;
}
}
return is_right;
}
void result(){
int nl;
if(nl==1){
printf("回答正确!\n");
}else if(nl==0){
printf("回答错误!\n");
}
}
void result()函数就会可能搭载这里代码里的其中一个函数的栈一起返回值,就有可能void result()这个函数“融在”它搭载同一个函数的栈中,即使void result()函数没有形参,但是调用它也能发挥作用的原因。

浙公网安备 33010602011771号