原因 main-C 不是 const

Dav*_*542 3 c pointers program-entry-point constants

我看到这个main()函数通常被称为:

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

与这些定义相关:

  1. 从技术上讲,对于char** argvchar* argv[]是一个优先于另一个还是可以 100% 互换?
  2. 因为argc字符串和参数字符串(应该是?)都是不可变的,为什么它们不是const?或者这是无关紧要的事情,只是出于惯例/历史目的而被省略了?我想这可以通过以下方式完成:const char **argv = (const char **) argv;但很好奇为什么这还没有完成(例如,是否有理由更改收到的参数?)

Dav*_*eri 5

因为它们都是可修改的:

N1570 §5.1.2.2.1/2:

参数 argc 和 argv 以及 argv 数组指向的字符串应可由程序修改,并在程序启动和程序终止之间保留它们最后存储的值。

  • 为什么不?一个例子:你想在传递数字时用点替换逗号,转换为小写/大写,删除/替换扩展名......修改字符串的原因有很多 (4认同)