カーニハンとリッチーのThe C Programming Languageの配列とポインターに関する章を読んでいます。
彼らは例を挙げます:
/* strlen: return length of string s */
int strlen(char *s)
{
int n;
for (n = 0; *s != '\0'; s++)
n++;
return n;
}
そして次のように言います。
はポインタであるためs
、インクリメントは完全に合法です。s++
を呼び出した関数内の文字列には何の影響も与えませんstrlen
が、ポインタの strlen のプライベート コピーをインクリメントするだけです。つまり、次のように呼び出します
strlen("hello, world"); /* string constant */
strlen(array); /* char array[100]; */
strlen(ptr); /* char *ptr; */
すべてうまくいきます。」</p>
最初の呼び出しの例を除いて、これらすべてを理解しているように感じます: なぜ、またはどのように、文字列リテラル"hello, world"
はchar *s
? これはどのようにポインターですか?関数はこの文字列リテラルをローカル変数の値として割り当て、配列名/ポインタとして*s
使用しますか?s