-1
は、関数定義があることと仮定します。「[0] & str」は配列すなわちの最初のブロックのアドレスを渡す場合にのみ、それが動作するはず変数/配列のアドレスをとる関数を宣言すると、アドレスを渡すだけで動作するはずです。なぜそれも定数で動作するのですか?
int strlength (char str[]) {
int i;
for(i=1;str[i]!='\0';i++);
return i;
}
OR「str」は、それが一定の文字列を渡すにしても動作します"AnswerPlease"としましょう。どうして?
なぜあなたは「文字列定数を渡しても」動作しないはずですか? 'strlength()'は 'str'が指すデータを変更しようとしません。 – chux
文字列リテラルは、 'char'sや' int'とは異なる特別なものです。 '' Blahblahblah ''を使うと、文字列リテラルが実際にメモリのどこかに格納されます。他のものとは異なり、メモリが割り当てられていない '' C ''と言います。以下の答えが示すように、文字列リテラルは 'static const char []'であり、配列の場合と同様に最初の要素のアドレスを取得します。 –