2017-02-13 3 views
-1

は、関数定義があることと仮定します。「[0] & str」は配列すなわちの最初のブロックのアドレスを渡す場合にのみ、それが動作するはず変数/配列のアドレスをとる関数を宣言すると、アドレスを渡すだけで動作するはずです。なぜそれも定数で動作するのですか?

int strlength (char str[]) { 
      int i; 
      for(i=1;str[i]!='\0';i++); 
      return i; 
     } 

OR「str」は、それが一定の文字列を渡すにしても動作します"AnswerPlease"としましょう。どうして?

+2

なぜあなたは「文字列定数を渡しても」動作しないはずですか? 'strlength()'は 'str'が指すデータを変更しようとしません。 – chux

+0

文字列リテラルは、 'char'sや' int'とは異なる特別なものです。 '' Blahblahblah ''を使うと、文字列リテラルが実際にメモリのどこかに格納されます。他のものとは異なり、メモリが割り当てられていない '' C ''と言います。以下の答えが示すように、文字列リテラルは 'static const char []'であり、配列の場合と同様に最初の要素のアドレスを取得します。 –

答えて

関連する問題