へのポインタを作り、私はchar配列が定義されています。これは正しいポインタを使用する場所ですか?C++は、C++でchar配列
私の質問は、このchar配列へのポインタを作る正しい方法は何ですか。私はちょうど最初の要素へのポインタを作成し、私は私が最後の文字を打つまで、私はメモリを介してステップの値を変更したいですか?
へのポインタを作り、私はchar配列が定義されています。これは正しいポインタを使用する場所ですか?C++は、C++でchar配列
私の質問は、このchar配列へのポインタを作る正しい方法は何ですか。私はちょうど最初の要素へのポインタを作成し、私は私が最後の文字を打つまで、私はメモリを介してステップの値を変更したいですか?
char miniAlphabet[] = {'A','B','C','D','E', '\0'};
これらは同等です。
char *p1 = miniAlphabet;
char *p2 = &(miniAlphabet[0]);
()
はオペレータの優先順位のために役に立たないことに注意してください、C/C中のSO
char *p3 = &miniAlphabet[0];
++配列の名前が配列の最初の要素へのポインタです。あなたはその後、いくつかの魔法を行うには、ポインタ数学を使用することができます
...
これは、第二の要素を指すようになります:
char *p4 = &miniAlphabet[0] + 1;
char *p5 = &miniAlphabet[1];
または
char *p6 = miniAlphabet + 1;
のような
編集、v.clearありがとう。 –
こんにちは、私は簡単な質問があります。 char * p1 = miniAlphabetを実行すると、p1は配列の最初の要素のアドレスを格納するようになりました。どのようにして、cout << p1 << endlを実行すると、最初の要素のアドレスではなく、char配列全体(この場合はABCDE)が得られますか? –
@DannyBrown * cout *の作成者が決定したためです。すべてのchar *ポインタに "hello world"という文字列を書くことさえあったかもしれませんが、それはばかげているでしょう。あなたが文字を書いている職業であれば、最も知的なことは、char *を文字列として出力することです。ポインタアドレスを出力したい場合は、次のようにしてください。* << static_cast
poメモリ内の配列の位置は、最初の要素の位置と同じです。したがって、たとえば、両方の関数のシグネチャは以下と等価です:
function changeArray(char[] myArray);
function changeArray(char* myArray);
そして、あなたはどちらのバージョンのように呼び出すことができます:あなたは配列を渡すと
changeArray(miniAlphabet);
...または
changeArray(&(miniAlphabet[0]));
関数には、配列変数として参照渡しされるのは、実際には配列の最初の要素のアドレスへのポインタです。
funcName(miniAlphabet);
をして、このような「参照によって」配列を受け取ります:だから、このように関数を呼び出すことができ
void funcName(char *miniAlphabet) {
...
}
を一言で言えば、はい。配列を作成するときは、定義したサイズと型の配列へのポインタです。これはまた、最初の要素へのポインタです。
あなたが提案している例です。
void foo(char *array)
{
array[0] = 'z';
array[2] = 'z';
}
...
char myArray[] = { 'a', 'b', 'c'};
foo(myArray);
//myArray now equals {'z', 'b', 'z'}
また、dereferencing myArrayは、最初の要素の値を返します。
これを見ただけで、\ 0よりもずっと優れています。ありがとう –