解释这个c语言程序的各行的功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解释这个c语言程序的各行的功能相关的知识,希望对你有一定的参考价值。

这是个用堆栈写的简单计算器

#include<stdio.h>
#define maxsize 100
int numstack[maxsize];
char opstack[maxsize];
int top1,top2,sum;
int main()

char str[maxsize];
int num1,i,j;
char ch;
while(top1=top2=0,gets(str)!=NULL)

sscanf(str,"%d",&num1);
numstack[top1++]=num1;
for(j=1;sscanf(str+j,"%c%d",&ch,&num1)!=-1;j+=2)

if(ch=='*')
numstack[--top1]*=num1;
else if(ch=='/')
numstack[--top1]/=num1;
else

opstack[top2++]=ch;
numstack[top1++]=num1;


sum=numstack[0];
for(i=0;i<top2;i++)

if(opstack[i]=='+')
sum+=numstack[i+1];
else if(opstack[i]=='-')
sum-=numstack[i+1];

printf("%s=%d\n",str,sum);

参考技术A 好像用的是 后置算法

为啥我们不能在 C 语言中拥有两个主要功能?

【中文标题】为啥我们不能在 C 语言中拥有两个主要功能?【英文标题】:Why can't we have two main functions in C language?为什么我们不能在 C 语言中拥有两个主要功能? 【发布时间】:2013-10-09 13:01:00 【问题描述】:

谁能解释一下内部发生了什么,除了main 是起点,我们不能有两个起点。

int main()

   int main()
   
      return 0;
   
   return 0;

【问题讨论】:

我不明白你在问什么。你能澄清一下吗? 嵌套函数不是 C 的一部分。有一个 GCC 扩展。你问的是这个吗? 【参考方案1】:

这不是合法的 C 代码 - 在 C 中,函数不能在另一个内部定义。

不能这样做没有根本原因,但是实现这样的函数要么使激活记录布局复杂化,并且会降低效率(因为像闭包这样的考虑),要么会引入内存的潜力错误(如果你返回一个指向另一个函数内部的函数的指针,而内部函数引用外部函数中的数据,会发生什么?)为了简单和高效,C 只是不支持这一点。

希望这会有所帮助!

【讨论】:

s/declared/defined/ 你可以在函数definitiondeclare一个函数;你不能嵌套定义(尽管 gcc 支持它作为扩展)。【参考方案2】:

标准 C 不允许在另一个函数中定义一个函数。一些编译器支持将此作为扩展名,但名称必须不同,否则按名称调用函数会模棱两可。

main 是程序的入口点。根据定义,一个程序只有一个入口点:它是在程序启动时(经过一些初始化)执行的函数,并且在该函数返回时(经过一些清理之后)程序退出。

【讨论】:

【参考方案3】:

因为程序必须有一个起点。命名为“main”的函数是 C 中的默认起点。这就是 C 保留“main”作为名称的原因,您不能拥有另一个名为“main”的函数。

【讨论】:

以上是关于解释这个c语言程序的各行的功能的主要内容,如果未能解决你的问题,请参考以下文章

帮我解释一下这个C语言程序?

请帮我解释一下这个函数(C语言)

c语言程序解释

在c语言中啥是前导字符? 本人是菜鸟,望好心人详细解释

麻烦哪位高手解释一下这个C语言程序中,那个word 有啥用?

ASP.NET编译成功后,为啥有些功能不会执行?麻烦高手解答!