C ++の複雑さを理解しようとしているだけなので、文字列やポインタをいじっています。しかし、私は本当に理解できない何かに出くわしました。
まず、私は同じ関数を使用しており、私が知る限り、毎回同じ引数を指定しています。私はそれをメイン関数と別の関数から呼び出しており、それぞれからわずかに異なるアドレスを取得しています。メモリの特定の部分からデータを読み取る機能は次のとおりです。
void printDataFromAddressForLength(char* pointer, long length)
{
cout << "\n" << endl;
for (int i=0; i<length; i++)
{
cout << "&pointer: " << &pointer + i << "\tData: " << pointer + i << endl;
}
}
この関数の目的は、各行に現在のアドレスと値を出力し、同じことを実行する場所から繰り返して使用できるようにすることです。これは、実際の目的のない非常に単純な関数です。
これは私のmain()にあるコードです
MessageData messageData = returnStruct();
printDataFromAddressForLength(messageData.pChar, messageData.length);
returnStruct()関数からprintDataFromAddressForLengthも呼び出しています。このコードは以下のとおりです。
// Returns MessageData from function
MessageData returnStruct()
{
static string staticTestString = "Time and time again";
MessageData metaData;
MessageData* pMetaData = &metaData;
pMetaData->pChar = &staticTestString[0];
pMetaData->length = staticTestString.length();
printDataFromAddressForLength(pMetaData->pChar, pMetaData->length);
return metaData;
}
以下の出力は、return構造体の内部から呼び出されたprintDataFromAddressForLength()関数からのものです。注:0x0027F * 7 *
&pointer: 0027F7BC Data: Time and time again
&pointer: 0027F7C0 Data: ime and time again
&pointer: 0027F7C4 Data: me and time again
&pointer: 0027F7C8 Data: e and time again
&pointer: 0027F7CC Data: and time again
&pointer: 0027F7D0 Data: and time again
&pointer: 0027F7D4 Data: nd time again
&pointer: 0027F7D8 Data: d time again
&pointer: 0027F7DC Data: time again
&pointer: 0027F7E0 Data: time again
&pointer: 0027F7E4 Data: ime again
&pointer: 0027F7E8 Data: me again
&pointer: 0027F7EC Data: e again
&pointer: 0027F7F0 Data: again
&pointer: 0027F7F4 Data: again
&pointer: 0027F7F8 Data: gain
&pointer: 0027F7FC Data: ain
&pointer: 0027F800 Data: in
&pointer: 0027F804 Data: n
この出力は、メイン自体から呼び出されたprintDataFromAddressForLength()関数から取得されます。注:0x0027F * 8 *
&pointer: 0027F8BC Data: Time and time again
&pointer: 0027F8C0 Data: ime and time again
&pointer: 0027F8C4 Data: me and time again
&pointer: 0027F8C8 Data: e and time again
&pointer: 0027F8CC Data: and time again
&pointer: 0027F8D0 Data: and time again
&pointer: 0027F8D4 Data: nd time again
&pointer: 0027F8D8 Data: d time again
&pointer: 0027F8DC Data: time again
&pointer: 0027F8E0 Data: time again
&pointer: 0027F8E4 Data: ime again
&pointer: 0027F8E8 Data: me again
&pointer: 0027F8EC Data: e again
&pointer: 0027F8F0 Data: again
&pointer: 0027F8F4 Data: again
&pointer: 0027F8F8 Data: gain
&pointer: 0027F8FC Data: ain
&pointer: 0027F900 Data: in
&pointer: 0027F904 Data: n
私が知る限り、私は最初にその関数を呼び出し、ポインターと長さを渡します。
次に、これら2つのパラメーターを含む構造体をメインに返し、同じパラメーターであると予想したものを使用して同じ関数を呼び出します。長さは明らかに同じですが、pCharのアドレス増分が奇妙です。
どんな洞察にも感謝します!
乾杯