2015-09-26 86 views
-1

我与langage下的初学者,我想知道这是什么之间的区别:差异用C主函数声明

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

这:

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

我想这是同样的事情,但我不确定。有人可以解释我的区别。

谢谢

+4

阅读关于const ... http://www.geeksforgeeks.org/const-qualifier-in-c/ –

+0

在某种程度上它是同样的事情,但'const'告诉编译器你不应该能够改变'argv'中的值。如果你尝试,代码会抛出一个错误,而不是编译。 'const'与优化器相关,当你想给编译器提供优化提示时应该使用它。既然你刚刚开始使用C,我现在不会为此担心。 – Havenard

回答

0

我想首先你必须知道const char* c;char *const c;

  1. const char* c,常量意味着你不能改变内容c点。
  2. char *const c中,const意味着您不能更改c指向的位置。

如你所知,存储在char* c值是内存中的地址,所以第一const表示,为了不应该c点被changed.And第二个值表示的值c不应该改变。

因此,在const char * argv[]argvconst char* variables.This的阵列装置的内容,在argv点的每个元素到是constant.Actually,每个元素点为一个字符串,和argv是字符串的存储“参数数组“CL传递给你。确实,你只能读取参数但修改它们。 当然,如果const这里错过了,编译器不会阻止你。如果是这样,你可以改变你的代码中的字符串内容,我猜没有什么会发生,因为这些参数供你阅读。 :)

1

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

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

因此,请查阅您的编译器文档,查看关于main参数的说明。一个合理的期望是,编译器使这个表单的行为相同,如果你有int main(int argc, char *__argv[]) { const char **argv = (const char **)__argv;