いくつかのコードで、文字列が char* として宣言されているのを見てきました。これはどのように機能しますか。確かに、文字列を構成する文字の配列ではなく、単一の文字へのポインターです。次のように呼び出されるメソッドに文字列入力を取りたい場合:
theMethod("This is a string literal");
パラメータのデータ型は何ですか?
確かに、文字の配列ではなく、単一の文字へのポインターです
の配列の最初の文字へのポインタですchar
。ポインター演算と「配列」インデックスを実行することにより、最初の要素へのポインターを使用して配列の各要素にアクセスできます。
パラメータのデータ型は何ですか?
const char *
、関数内から文字を変更したくない場合 (これは一般的なケースです)、および変更char *
する場合。
これは、一般的な初心者 C の混乱です。任意の型へのポインターT *
は、あいまいに、型 T の単一オブジェクトへのポインターか、サイズが指定されていない型 T のオブジェクトの線形配列内の要素へのポインターです。プログラマであるあなたは、どれがどれであるかを知り、必要に応じて長さ情報を渡す責任があります。間違えた場合、コンパイラは待機して、プログラムが未定義の動作の崖から追い出されるのを監視します。
Cに文字列がある限り (実際には存在しないという強い主張がありchar *
ます)、このあいまいさを恥知らずに利用します。単一の ではなく、文字列。同じことは、他の型へのポインターには当てはまりません。const char *
char
定義ごとに、タイプ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 を使用していません。クリアしようとしています。