ポインターに 1 を追加すると、実際に追加される値は、ポインターが指す型のサイズになりますか? 例えば:
int* num[5];
cout << *num << ", " << *(num + 2) << endl;
これにより、num[1] と num[2] に格納されている値が出力されるため、間違っていなければ num + 2 は実際には num + 2*sizeof(int) になります。
ここで、char へのポインターの配列を文字列リテラルに初期化すると、次のようになります。
char* ch[5] =
{
"Hi",
"There",
"I,m a string literal"
};
これが可能なのは、"hi" のような文字列リテラルが最初の文字 (この場合は 'h') のアドレスを表すためです。今私の質問は、次のようなものをどのように書くことができるかです:
cout << *(ch + 2);
出力として「I、ma文字列リテラル」を取得しますか?ポインターは char を指しているので、実際にはポインターに 2 を追加するのは (ch + 2*sizeof(char)) ではないでしょうか? 「そこに」という出力が得られますか?
クーと関係あるの?cout は、ポイントされた値のメモリを検索して、ポイントされた値の内容を文字列として認識し、ポインター演算を変更する '\0' を見つけるかどうかを確認しますか? ただし、文字列を指す char へのポインターに 1 を追加すると、文字列は任意のサイズになる可能性があるため、毎回 (char のサイズではなく) 異なるバイト数を追加することになります。それとも私は完全に間違っていますか?申し訳ありませんが、私は C++ の初心者であり、一般的なプログラミングを行っています。