#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エコープログラムは定数ポインタをインクリメントします。
'argv'はポインタではなく、ポインタの配列です。ポインタは、ポインタを期待する関数に渡すときにのみ、ポインタへと減衰します。 –
関連:http://stackoverflow.com/questions/6226027/incrementing-an-array-of-pointers-in-cここでは、事前標準のCプログラムを見ています。 –
@AlexandreC .:いいえ、 'argv'はポインタの配列ではありません。関数パラメータ宣言の文脈では、 'T a []'は 'T * a'と解釈されることに注意してください。この場合、 'argv'は' char ** '型なので、' ++ 'は許されます。 –