我目前想知道关于c ++指针的一些事情。例如,指针返回变量的内存地址。因此,如果我们说,我们想要一个整数的内存地址,我们通常有32位的长度。
当我们说一个存储单元的大小是1字节时,我需要4个单元用于一个整数(4x8位= 32位)。所以,假设我有一个指针地址,如:selenium.common.exceptions.WebDriverException: Message: unknown error: Cannot read property 'style' of undefined
,用于一个整数(0x613c20
)。
当这个地址指向整个存储器中的4个单元中的一个时,为什么当我将单元增加+1时,我得到另一个值?我会得到相同的值,因为我仍然在4个单元格中的一个?
非常感谢。
编辑:
我想我在第一篇文章中并不那么清楚:
我并不是说我将指针增加了int a = 10;
;
我在调试器内部并通过添加+1来操纵整数的内存地址,如:
0x1 - > 0X2。
这意味着:
pointer++
当整数大小为4字节长时,为什么我不能在这里获得10?
答案 0 :(得分:1)
当您递增/递减指针时,内存地址会增加/减少"通过对象类型的长度,指针被声明为(例如,如果它是相同类型的对象序列,它将指向相同类型的下一个/上一个对象)
一个小例子:
#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
正如你所看到的,短指针会增加&#34;增加&#34;作为一个短的两个步骤占用2个字节的内存而不是int,它更长并占用四个字节(在我的系统上,即)。
我建议参考有关数据类型长度的文档(它们可以在系统和编译器之间变化)和指示以获取更多信息。
答案 1 :(得分:0)
你在做的是指针算术。将指针(不是值)增加1的结果取决于指针的类型。在您的示例中,实际地址不会增加1,而是增加4(或sizeof(int))。
也没有这样的东西我会得到相同的值,因为我仍在4个单元格中的一个