0

最初に: STRCAT :

Cplusplus-strcat

明らかに定義が言うとき:

char * strcat ( char * destination, const char * source );

なぜ彼らは例で char str[80] を使用したのですか??? 彼らは文字ポインタを使用すべきではありませんでしたか?

4

5 に答える 5

3

これは、C/C++ では配列がポインターに分解されるためです。s の値を定義するchar s[80]と、最初の文字のアドレスになります。&s[0]

于 2009-11-27T10:55:50.907 に答える
3

配列はポインタとしても使用できます。必要なstrcatのは、宛先文字列をコピーするメモリへのポインタです。この場合 str[80]、80文字を保持できるメモリが得られます。

于 2009-11-27T10:55:57.290 に答える
2
char str[80];

80文字の配列を宣言します。ただし、CおよびC ++では、配列は暗黙的にポインターに変換されます。配列を関数(strcatなど)に渡すと、配列は自動的に「減衰」し、配列の最初の要素へのポインターを形成します。

これは、配列とポインタが同じものであると言うことと同じではありません。そうではありません。たとえばsizeof() 、上記の配列とで異なる結果が得られますchar*

于 2009-11-27T11:32:52.270 に答える
-1

厳密に言えば、配列はメモリ ブロックの先頭へのポインタです。80文字の先頭を指す も同様ですstrchar *

配列にインデックスを付けると、たとえば位置 53 は次のようになります。 str とstr[53]同じです。文字ポインターに 53 を追加するとポインターが返されるため、内部の値を取得するには、アスタリスクを使用して逆参照する必要があります。ポインター。実際、配列表記は、特定の状況でコードを読みやすくするだけです。*(str + 53)char *

実際、文字列をコピーするときに先頭のテキストをスキップしたい場合は、char の配列を使ったちょっとしたトリックです。たとえば、配列str[80]に string が含まれているとします"1023: error in code!"。そして、前に数字を付けずに文字列だけを表示したいとします。この場合、あなたは言うことができ、印刷されるprintf( "%s", str + 6 )だけです。"error in code!"

于 2009-11-27T10:56:16.227 に答える
-6
char str[80];

編集:おっと、私は答えを急ぎました。dribeas が言うように、ステートメントは配列を宣言し、使用時に str を暗黙的にポインターに変換できます。例えば:

++str;

は無効な操作です:

char* ptr;
++ptr;

そうではありません。

于 2009-11-27T10:55:59.317 に答える