簡體   English   中英

C ++內存地址分配

[英]C++ Memory Address Allocation

道歉,我感到沮喪,並在沒有適當詳細信息的情況下通過手機發布了問題

考慮以下C ++代碼:

 int arr[2];
    arr[0] = 10;
    arr[1] = 20;
   // cout << &arr;
    for (int i = 0; i < 2; i++)
    {
       cout << &arr + i << "\t\t"<<endl;
    }

    cout << sizeof (arr);

cout進入for循環打印

0x7ffeefbff580 0x7ffeefbff588

比第一個元素多8個字節

我的問題是,如果在我的機器上sizeof(int)是4,為什么還要再增加8個字節而不是4個字節?

現在,您已經給我們提供了代碼,我們可以回答您的問題。

因此,令人困惑的是: &arr + i 這並沒有按照您的想法做。 請記住, &優先於+ 因此,您取了arr地址並將其向前移動i次。

指針算術的工作方式是&x + 1將指針向前移動size(x) 那么在您的情況下, size(arr)多少? 它是8,因為它是2的整數數組(我假設int的大小為4)。 因此, &arr + 1實際上會將指針向前移動8個字節。 您體驗的確切內容。 您不要求下一個int,而是要求下一個array 我鼓勵您嘗試一下,例如將arr定義為int[3] (大小為12),然后看看指針如何向前移動12個字節。

因此,第一個解決方案是不使用&進行arr + i 我們可以將指針算術應用於數組,在這種情況下,它會退化為指針類型int* 現在,由於int的大小為4,則arr + 1正確指向向前4個字節的內存段。

但是我建議不要使用指針算法,而要使用&arr[i] 這樣做是一樣的,但是IMO不太容易出錯,也不會造成混亂,並且可以告訴我們更多有關此意圖的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM