我在理解指针的概念时遇到了一些麻烦,其中之一是:
让我们声明一个整数类型变量 n 和一个指向它的指针 *p。
int n=23,*p;
现在,
p=&n;
如果我没记错,将变量 n 的地址(比如 3000)分配给 p。
所以 cout<<p<<" "<<*p;
将分别输出 3000 和 23。
我的疑问是假设我们做了这样的事情:
p=5;
即为 _设计用于保存内存位置的变量分配一个数值_,会发生什么?
变量是移动到内存位置’5’(很可能不是)还是指针刚刚转换为’int’并保持值5?我会自己尝试一下,只是弄乱了我的系统内存让我重新考虑。
另外,当我们声明任何变量时(假设 int 有 2 个字节空间),它是存储在 3000、101、2700 之类的随机内存位置,还是存储在 0、2、4 等?声明的下一个变量是否存储在下一个变量中(如 3002、103 或 2702),或者两者之间是否存在某种间隙?
原文由 Anchith Acharya 发布,翻译遵循 CC BY-SA 4.0 许可协议
在您的示例中,这是一个编译器错误。
但是,我假设您想要做的是:
正如您在运行此代码时所知道的那样。 n 的地址不变。
对于你的第二个问题。
是和否:)
如果您定义两个彼此相邻的变量,它们在内存中 可能 彼此相邻。
这种行为是由编译器决定在哪里粘贴everthting。它可能彼此相邻,也可能不存在。如果要保证它们彼此相邻,请使用数组。