C11 5.1.2.2.1/2说:
数组指向的参数
argc和argv字符串argv应由程序修改,并在程序启动和程序终止之间保留它们最后存储的值.
我对此的解释是它指定:
int main(int argc, char **argv)
{
if ( argv[0][0] )
argv[0][0] = 'x'; // OK
char *q;
argv = &q; // OK
}
Run Code Online (Sandbox Code Playgroud)
但它没有说什么:
int main(int argc, char **argv)
{
char buf[20];
argv[0] = buf;
}
Run Code Online (Sandbox Code Playgroud)
被argv[0] = buf;允许的?
我可以看到(至少)两个可能的论点:
argv,argv[x][y]但不是argv[x],所以意图是它不可修改argv是指向非const对象的指针,因此在没有相反的特定措辞的情况下,我们应该假设它们是可修改的对象.