main()
在C和C++中定义函数的正确(最有效)方法是什么- int main()
或void main()
- 为什么?如果int main()
那么return 1
或return 0
?
这个问题有很多重复,包括:
main()
函数的有效签名是什么?main()
函数void main()
和int main()
?main()
在C++中的签名main()
? - 对于C++,确实有一个非常好的答案.main()
C语言中的函数样式main()
C中的方法类型int main()
vs void main()
在C中有关:
我在许多帖子中都看到"在大多数情况下,数组名称会衰减为指针".
我可以知道在什么情况下/数组名称表达式不会衰减成指向其第一个元素的指针吗?
几乎每个读这篇文章的人都熟悉这三个关于C的关键事实:
[]
与指针一样适用于指针.这三个事实绝对是C中数组和指针处理的核心.它们甚至不是三个独立的事实; 它们是一个中心概念的相互关联的方面.如果没有对这个概念的正确理解,就不可能正确地进行相当基本的C编程.
我今天的问题很简单,这个概念的名称是什么?
我以为我是老式的,但我总是把它称为"C中数组和指针之间的等价",或简称为"数组/指针等价".但我知道你几乎不能在SO上说出这些话; 他们几乎是禁忌.
这可能看起来像一个抽象或哲学问题,所以更具体地构建它,我正在寻找的是一个简单的名词或名词短语我可以在句子中使用"是的,由于_____,数组下标可以被认为是作为指针算术的语法糖",回答,比方说,这个问题.
(但是请注意,我不是在寻找这个问题的答案,也不是为了回答"'等价'这个词有什么问题?".是的,我知道,它会误导学习者想象数组和指针是某种方式同样.当我写这个FAQ列表条目时,我确实有这种困惑.)
这可能是一个基本问题,但写char*[]和char**有什么区别?例如,在main中,我可以有一个char*argv [].或者我可以使用char**argv.我假设两种符号之间必须存在某种差异.
在C中,我读过这个char** x
并且char* x[]
意思完全相同.我理解第二个例子,但我不明白第一个例子.
对我来说,第一个例子是"指向指向字符的指针",但C会将其视为"指向字符数组的指针列表"?
有人能够以外行的方式向我解释这个问题,因为我一直有一个非常困难的时间把握它.
编辑:我承认我说的第一点是我认为人们想要听到的而不是我的实际解释.我也把它看作是指向char的指针,但是当我在这个问题上阅读最佳答案时,我的理解就下降了:char*argv []和char**argv之间的区别是main()的第二个参数
这表明当用作参数向量时,它被用作指向字符指针数组的指针...
如果要处理命令行参数,可以main
像下面一样定义函数.
int main(int argc, char **argv) { ... }
Run Code Online (Sandbox Code Playgroud)
要么
int main(int argc, char *argv[]) { ... }
Run Code Online (Sandbox Code Playgroud)
在许多网站中,解释了第一个argv
是指向指针的指针,第二个是指针数组.但是,这是真的吗?实际上,即使你使用第二个定义,你也可以设置argv
为=
运算符的LHS,如果argv
真的是数组,我认为是不允许的.在我看来,"当作为函数的参数写的",char **argv
并且char *argv[]
是完全平等的.但是,我还没有找到证据.
谁能帮助我?(我想要的是严格或正式书面证据.)
注意:我已经阅读了下面的主题.我相信我的帖子不是他们的副本.