繁体   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