-2

いくつかのコードで、文字列が char* として宣言されているのを見てきました。これはどのように機能しますか。確かに、文字列を構成する文字の配列ではなく、単一の文字へのポインターです。次のように呼び出されるメソッドに文字列入力を取りたい場合:

theMethod("This is a string literal");

パラメータのデータ型は何ですか?

4

3 に答える 3

5

確かに、文字の配列ではなく、単一の文字へのポインターです

の配列の最初の文字へのポインタですchar。ポインター演算と「配列」インデックスを実行することにより、最初の要素へのポインターを使用して配列の各要素にアクセスできます。

パラメータのデータ型は何ですか?

const char *、関数内から文字を変更したくない場合 (これは一般的なケースです)、および変更char *する場合。

于 2013-07-17T19:06:51.273 に答える
2

これは、一般的な初心者 C の混乱です。任意の型へのポインターT *は、あいまいに、型 T の単一オブジェクトへのポインターか、サイズが指定されていない型 T のオブジェクトの線形配列内の要素へのポインターです。プログラマであるあなたは、どれがどれであるかを知り、必要に応じて長さ情報を渡す責任があります。間違えた場合、コンパイラは待機して、プログラムが未定義の動作の崖から追い出されるのを監視します。

Cに文字列がある限り (実際には存在しないという強い主張がありchar *ます)、このあいまいさを恥知らずに利用します。単一の ではなく、文字列。同じことは、他の型へのポインターには当てはまりません。const char *char

于 2013-07-17T19:12:45.563 に答える
0

定義ごとに、タイプchar *(またはunsigned char *またはconst char *)の「文字列」ですが、それはその文字チェーンの最初の文字へのポインターです(配列またはベクトルという単語を使用したくありません)。違いは、char: 'x' (一重引用符) で確認することです。

これは古き良きCプログラミングです(時々私はそれを失って泣くことができました)

char *p = "i am here";
for (q=p; ++q; *q) { // so lets start with p walk through and end wit the /0 after the last e 
    if (*q=='h') { // lets find the first 'h' and cut the string there
        *(q-1)=0;
        break;
    }
}

ここでは const やその他の prob を使用していません。クリアしようとしています。

于 2013-07-17T20:04:41.540 に答える