百科问答小站 logo
百科问答小站 font logo



为什么C语言中主函数main后面有个()? 第1页

  

user avatar   Sunnie-Shine 网友的相关建议: 
      

如果是初学C,那么这函数确实会成为一个难点。

思考一下数学里的函数,给一个数或者多个数,就可以根据这些数值通过指定的函数式子得到结果,这就是数学函数。

在C语言里,为了方便计算机操作和处理,数学函数被理解为“我需要指定的数据才能根据他们执行固定的操作,求得结果”。

众所周知,main是程序的入口点,既然要让程序跑起来,一两个单独的语句是不够清晰的。C语言的main是一个函数,需要若干数据,通过数据指定行为,所以有一个小括号。

至于小括号里的东西是啥,一般我们约定有两种写法,一个是 void,另外一个是 int argc, char *argv[]。前面这种整体写作 int main(void),表示你不需要任何数据,程序就可以跑起来。其实想一想也是,我在main开始的时候为啥要莫名其妙的传一些数值进去呢?

那后面这种呢?C语言想到你的这个想法了,就是main前如果我有不定的数据,让main去根据这些外部的数据来得到结果,于是就有了后面这个东西。它写作 int main(int argc, char *argv[]),看起来是挺复杂的,但是实际上就告诉你,我在执行main的操作的时候,需要一个int类型的整数数值,一个 char *[]类型的字符串数组。

外部传入的数据可能是任意格式的,所以考虑到这个问题,最稳妥和方便的办法就是从外部输入一啪啦字符进去,然后系统处理后直接丢到这里当参数。

我们运行C语言的时候,一般都是通过编译器编译后直接在IDE里调试的,那么程序直接就走IDE这里就打开了。但有些时候,我们必须要让这些数据不定,从外界传入。这个时候咋办呢?命令行啊。

打开命令行,进入文件夹,然后我们运行我们的程序。此时我们会输入一些东西,根据main的给定行为来进行处理。那么,它的长相就可能是这样的:Test.exe -a 100 -b 't' -c 2e-4。那么这一坨东西就会在进入main前改变成多个字符串,此时

       int main(int argc, char *argv[])     

里面的 int argc 传入的就是6,而 char *argv[] 则是 { "Test.exe", "-a", "100", "-b", "'t'", "-c", "2e-4" }。 数数看,刚好6个数据,所以你应该知道 argc 是什么了吧。

argc 是表示你录入的信息里,以空格分隔的所有信息的总数(包括运行程序的名字),而 argv 则是这些信息的具体数值。

所以么……我刚说了这么多,到底说了个什么东西呢?main是一个函数,函数的标志性符号就是小括号了。如果没有这个小括号,C语言就不知道你这个main到底是个啥。

       int main int main(void)     

你看看这两种写法,第一种你绝对会认为它只是一个普通的变量的定义,而后面这个你才知道它是个函数。

所以,我说的内容有两点。第一,main被C语言规定为是一个函数,所以必须有函数应该有的样子;而是main的小括号里可以是空的(但是按规定要加 void 占位),或者带两个参数,表示你从外界传入的数据的信息(总信息数量以及信息内容)。




  

相关话题

  C/C++中的数组为什么必须定义之后在一行内立刻赋值,而不能定义数组之后换一行再赋值? 
  为什么51单片机编程喜欢用unsigned(无符号)类型定义变量呢直接用 int.char..不好吗? 
  只会c语言语法,就能强行做一个编译器出来吗? 
  C 语言 printf("%f ",3/2) 为什么结果是 0 ? 
  C 语言中,x += 5 == 4 是什么意思? 
  int *p=new int,当free(p)时free函数是怎么知道要释放4个字节而不是5个的? 
  C/C++中的数组为什么必须定义之后在一行内立刻赋值,而不能定义数组之后换一行再赋值? 
  C/C++ 如何自定义printf函数的格式化符? 
  C语言和C++中,为什么malloc函数需要传入申请的内存大小,而free时候却不需要传大小呢? 
  int *p=new int,当free(p)时free函数是怎么知道要释放4个字节而不是5个的? 

前一个讨论
能否构造一个含有自己哈希或MD5等的文件?
下一个讨论
如何智能地在每个数字中间加一个「,」?





© 2024-06-03 - tinynew.org. All Rights Reserved.
© 2024-06-03 - tinynew.org. 保留所有权利