C主函数声明的差异

时间:2015-09-26 01:54:59

标签: c const

我是语言C的初学者,我想知道它之间的区别:

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

和此:

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

我认为这是一回事,但我不确定。有人可以解释我的不同之处。

谢谢

2 个答案:

答案 0 :(得分:1)

int main(int argc, char * argv[])是正确的,必须由编译器接受。

int main(int argc, const char * argv[])可能会被编译器拒绝。如果编译器接受它,那么行为是实现定义的。这意味着编译器必须记录它接受的main的非标准签名,并记录每个签名的行为。

因此,请参阅编译器的文档,了解它对main的参数的含义。合理的期望是编译器使此表单的行为与int main(int argc, char *__argv[]) { const char **argv = (const char **)__argv;的行为相同。

答案 1 :(得分:0)

我想首先你需要知道<!-- In Master Layout.cshtml --> @{ string currentAction = ViewContext.RouteData.Values["action"].ToString(); string currentScript = currentAction + ".js"; } <script src= "@currentScript"></script>const char* c;

  1. char *const c;中,const意味着您无法将内容const char* c更改为。
  2. c中,const表示您无法将位置char *const c更改为。
  3. 如您所知,c中存储的值是内存中的地址,因此第一个char* c表示const指向的值不应更改。第二个表明c的值不应该改变。

    因此,在c中,const char * argv[]argv变量的数组。这意味着const char*中每个元素指向的内容都是常量。实际上,每个元素指向一个字符串,argv是一个存储CL传递给你的“参数”的字符串数组。你只能读取参数但修改它们。 当然,如果错过argv,编译器不会阻止你。如果是这样,你可以更改代码中字符串的内容,我想没有任何事情会发生,因为这些参数供你阅读。 :)