我们知道整数变量占用4(字节)内存地址。我只是想知道,如果我们初始化整数变量并指向它。我可以从指针获取它的值(它具有变量的地址:我的计算机中的0x22fef8)。但是0x22fef8之后的内存地址如何是0x22fef9,0x22fefa,0x22fefb?那里有什么?如果我们取消引用这个地址,我们会得到变量的值吗?如何访问它们?
谢谢。答案 0 :(得分:5)
你是对的:在32位计算机中,一个整数占用四个字节。在C中,可以用以下代码表示:
int i = 0x12345678;
int *p_i = &i;`
如果p_i
获得值0x22fef8
,则p_i++
将变为0x22fefc
,因为它将指向下一个整数。如果要查看组成i
的字节中的内容,则需要使用不同的指针:
typedef uint_8 byte;
byte *p_b = (byte *)&i;`
这意味着您将&i
表示的指针更改为int并将其类型转换为指向字节的指针。它仍然具有值0x22fef8
,因为i
的第一个字节是 - 但现在如果你执行p_b++
,它将更改为0x22fef9
。请注意,如果您打印出*p_b
的原始值(即它指向的字节),它将不会提供与i
相同的值。根据计算机的不同,它将打印出第一个字节或最后一个字节:0x12
或0x78
,或至少打印出其十进制版本。
这是由于" endianness"计算机,它影响多字节值的存储。像x86这样的小端计算机首先存储价值的最小部分 - 0x78
- 而Power PC计算机首先存储价值的最大部分 - 0x12
。
答案 1 :(得分:1)
int
类型占用系统上的四个字节,因此这些类型都被int
占用。除第一个外,所有这些都无法访问。
值得注意的是,有些int
在其他系统上占用了两个字节。它不受标准的约束。
答案 2 :(得分:0)
如果您想查看这些地址中的值,只需执行此操作即可获得下10个地址的值
int main()
{
int a = 5;
int *p_i = &a; // The address of 'a' is stored in pointer 'p_i'
// Now you want to check the values in 10 further addresses
for ( int i = 0; i < 10; i++ )
{
int value = *p_i; // Here it is getting the address of pointer as integer value
cout << value << endl;
p_i++;
}
return 0;
}