我与langage下的初学者,我想知道这是什么之间的区别:差异用C主函数声明
int main(int argc, const char * argv[])
这:
int main(int argc, char * argv[])
我想这是同样的事情,但我不确定。有人可以解释我的区别。
谢谢
我与langage下的初学者,我想知道这是什么之间的区别:差异用C主函数声明
int main(int argc, const char * argv[])
这:
int main(int argc, char * argv[])
我想这是同样的事情,但我不确定。有人可以解释我的区别。
谢谢
我想首先你必须知道const char* c;
和char *const c;
const char* c
,常量意味着你不能改变内容c
点。char *const c
中,const意味着您不能更改c
指向的位置。如你所知,存储在char* c
值是内存中的地址,所以第一const
表示,为了不应该c
点被changed.And第二个值表示的值c
不应该改变。
因此,在const char * argv[]
,argv
是const char*
variables.This的阵列装置的内容,在argv
点的每个元素到是constant.Actually,每个元素点为一个字符串,和argv
是字符串的存储“参数数组“CL传递给你。确实,你只能读取参数但修改它们。 当然,如果const
这里错过了,编译器不会阻止你。如果是这样,你可以改变你的代码中的字符串内容,我猜没有什么会发生,因为这些参数供你阅读。 :)
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;
。
阅读关于const ... http://www.geeksforgeeks.org/const-qualifier-in-c/ –
在某种程度上它是同样的事情,但'const'告诉编译器你不应该能够改变'argv'中的值。如果你尝试,代码会抛出一个错误,而不是编译。 'const'与优化器相关,当你想给编译器提供优化提示时应该使用它。既然你刚刚开始使用C,我现在不会为此担心。 – Havenard