#include <stdio.h>
main(argc, argv)
int argc;
char *argv[];
{
register int i, nflg;
nflg = 0;
if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'n') {
nflg++;
argc--;
argv++; //Incements a constant pointer, how???
}
for(i=1; i<argc; i++) {
fputs(argv[i], stdout);
if (i < argc-1)
putchar(' ');
}
if(nflg == 0)
putchar('\n');
exit(0);
}
該程序遞增argv的值,但argv是C中的常量指針。爲什麼我從此沒有得到編譯錯誤?V7 Echo程序增加一個常量指針,怎麼樣?
'argv'不是一個指針,它是一個指針數組。只有當你將它們傳遞給期望指針的函數時,數組纔會衰減爲指針。 – 2012-02-24 17:36:39
相關:http://stackoverflow.com/questions/6226027/incrementing-an-array-of-pointers-in-c,這裏你只是看一個預標準的C程序。 – 2012-02-24 17:37:42
@AlexandreC:否,'argv'是*不是*指針數組;請記住,在函數參數聲明的上下文中,T a []被解釋爲'T * a'。在這種情況下,'argv'是'char **'類型,所以'++'是允許的。 – 2012-02-24 19:30:50