簡體   English   中英

內存單元和c ++指針

[英]memory cells and c++ pointers

我目前想知道有關c ++中的指針的一些信息。 例如,一個指針向我返回變量的內存地址。 所以如果說,我們想要一個整數的內存地址,通常我們有32位長度。

當我們說一個存儲單元的大小為1字節時,我需要4個存儲單元來存儲一個整數(4x8位= 32位)。 假設我有一個指針地址,如: 0x613c20表示一個整數( int a = 10; )。

當此地址指向整個內存中的4個單元之一時,為什么我將單元格僅增加+1時又得到另一個值? 我仍然會得到相同的值,因為我仍處於4個單元格之一內?

非常感謝你。

編輯:

我想我在第一篇文章中不太清楚:我並不是說我用pointer++增加了指針;

我在調試器內部,僅通過添加+1來操縱Integer的內存地址,例如:

0x1-> 0x2。

因此,這意味着:

int a = 10;
*int b = &a; // 0x1

*0x1 -> 10
*0x2 -> 1203104

當Integer大小為4字節長時,為什么在這里我也不能得到10個字節?

當您遞增/遞減指針時,內存地址將被聲明為該指針的對象類型的長度“增加/減少”(例如,如果它是一個序列,它將指向相同類型的下一個/上一個對象相同類型的對象)

一個小例子:

#include <iostream>
using std::cout;
using std::endl;

int main()
{
    int i = 5;
    int* p_i = &i;

    short c = 'a';
    short* p_c = &c;

    cout << "\npointer to int (4 bytes)\n";

    cout << "adress: " << p_i << "   ";
    cout << "value: " << *p_i << endl;
    ++p_i;
    cout << "adress: " << p_i << "   ";
    cout << "value: " << *p_i << endl;
    ++p_i;
    cout << "adress: " << p_i << "   ";
    cout << "value: " << *p_i << endl;
    ++p_i;
    cout << "adress: " << p_i << "   ";
    cout << "value: " << *p_i << endl;
    ++p_i;

    cout << "\npointer to short (2 bytes)\n";

    cout <<  "adress: " << p_c << "   ";
    cout <<  "value: " << *p_c << endl;
    ++p_c;
    cout <<  "adress: " << p_c << "   ";
    cout <<  "value: " << *p_c << endl;
    ++p_c;
    cout <<  "adress: " << p_c << "   ";
    cout <<  "value: " << *p_c << endl;
    ++p_c;
    cout <<  "adress: " << p_c << "   ";
    cout <<  "value: " << *p_c << endl;
    ++p_c;

    return 0;
}

以上代碼輸出:

pointer to int (4 bytes)
adress: 0x28ff24   value: 5
adress: 0x28ff28   value: 2686754
adress: 0x28ff2c   value: 2686764
adress: 0x28ff30   value: 2686800

pointer to short (2 bytes)
adress: 0x28ff22   value: 97
adress: 0x28ff24   value: 5
adress: 0x28ff26   value: 0
adress: 0x28ff28   value: -216

如您所見,short的指針以2的步長“增加”,因為short占用2個字節的內存,而int則更長,占用4個字節(在我的系統上)。

我建議參考有關數據類型長度的文檔(它們在系統和編譯器之間可能會有所不同)和指針,以獲取更多信息。

您正在做的是指針運算。 將指針(不是值)加一的結果取決於指針的類型。 在您的示例中,實際地址不會增加1,而是增加4(或sizeof(int))。 而且,沒有這樣的事情

我仍然會得到相同的值,因為我仍然處於4個單元格之一內

暫無
暫無

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

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