e17.c
無意味な記述!





/* statement has null effect */
/*###25 [cc] 警告: BBB:e17: 例 *cp++は(cp++)と同じで*は不要%%%*/
int main()
{
char * cp = "ABCD" ;
int i ;
/* (1)ポインタを前進させる。 */
/* (2)ポインタの実体を加算する */
/* (3)ポインタを前進させる。そしてその実体を何もしない */
/* (4)ポインタを前進させる。そしてその実体を何もしない */
cp = "ABCD" ; cp++ ; /* (1) */
cp = "ABCD" ; (*cp)++; /* (2) */
cp = "ABCD" ; *cp++ ; /* (3)<-LOOK */
cp = "ABCD" ; *(cp++) ; /* (4) */
return(0) ;
}
解説
LOOK以下のcpを標準出力すると何が表示されるか即答出来た人は、
C言語のポインターを理解しています。
『* と ++ の結合力は同位ですが、右から左へ評価されます。』
と言う事は誰も暗記していないので、
カッコを付ける習慣を付けましょう。
詳細な説明は、
『プログラミング言語C 第2版 ANSI規格準拠
カーニハン リッチー著/石田晴久訳』
「5.1 ポインタとアドレス」Page115
か
C-FAQ 4.3J
C-FAQ 4.3E
を参照して下さい。
『*cp++』の記述はポインタを理解していない証拠!!