可视C 编译器将相同的存储位置提供给两个变量
visual C++ compiler giving same memory location to two variables
以下是我定义了一个具有四个变量的结构的代码。前两个是阵列,每个数组有3个元素。其他两个变量是标量。我尝试使用VC ,G 和在线编译器来编译此代码。但是,在所有三种情况下," vel"数组的最后一个元素的内存地址以及变量"动力学"的地址被证明是相同的。这是代码。
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
using namespace std;
struct molec
{
double pos[3] = {0,0,0},vel[3] = {0,0,0},kinetic = 0,potential = 0;
};
int main()
{
const int n = 5;
molec particle[5];
for (int i = 0; i<n; ++i)
{
cout << "Particle no: " << i+1 << endl;
cout << "Coordinates: [ " << &(particle[i].pos[1]) << ", " << &(particle[i].pos[2]) << ", " << &(particle[i].pos[3]) << "]" << endl;
cout << "Velocities: [ " << &(particle[i].vel[1]) << ", " << &(particle[i].vel[2]) << ", " << &(particle[i].vel[3]) << "]" << endl;
cout << "Kinetic energy: " << &(particle[i].kinetic) << endl;
cout << "Potential energy: " << &(particle[i].potential) << endl;
cout << endl;
}
return 0;
}
这是我使用VC
对其进行编译时获得的输出Particle no: 1
Coordinates: [ 000000A01012F918, 000000A01012F920, 000000A01012F928]
Velocities: [ 000000A01012F930, 000000A01012F938, 000000A01012F940]
Kinetic energy: 000000A01012F940
Potential energy: 000000A01012F948
Particle no: 2
Coordinates: [ 000000A01012F958, 000000A01012F960, 000000A01012F968]
Velocities: [ 000000A01012F970, 000000A01012F978, 000000A01012F980]
Kinetic energy: 000000A01012F980
Potential energy: 000000A01012F988
Particle no: 3
Coordinates: [ 000000A01012F998, 000000A01012F9A0, 000000A01012F9A8]
Velocities: [ 000000A01012F9B0, 000000A01012F9B8, 000000A01012F9C0]
Kinetic energy: 000000A01012F9C0
Potential energy: 000000A01012F9C8
Particle no: 4
Coordinates: [ 000000A01012F9D8, 000000A01012F9E0, 000000A01012F9E8]
Velocities: [ 000000A01012F9F0, 000000A01012F9F8, 000000A01012FA00]
Kinetic energy: 000000A01012FA00
Potential energy: 000000A01012FA08
Particle no: 5
Coordinates: [ 000000A01012FA18, 000000A01012FA20, 000000A01012FA28]
Velocities: [ 000000A01012FA30, 000000A01012FA38, 000000A01012FA40]
Kinetic energy: 000000A01012FA40
Potential energy: 000000A01012FA48
任何人都可以确认这个问题肯定可以重复吗?如果是,有什么问题或为什么会发生?
预先感谢。
您的vel
数组只有三个条目。但是您打印出第四条的地址。碰巧的地址与结构中的下一个对象相同,这不足为奇。更改vel
有四个条目或打印出第三条条目的地址,您的问题将消失。
vel [0]&lt; - 第一个条目
vel [1]&lt; - 第二条条目
vel [2]&lt; - 第三个条目
vel [3]&lt; - 第四条
相关文章:
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 如何更好地检查两个 char 变量是否在一组值中?
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 命令行参数,cant 或两个变量
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- C++ 编译时在两个变量之间交替
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- 如何比较两个tm(来自ctime)变量
- 两个不同的进程,在同一地址上有 2 个 std::atomic 变量?
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- 为什么我不能使用最小和最大这两个词作为变量名称?
- 为什么一个接一个声明的两个变量在内存中不相邻?
- 在链接到两个 exe 的 dll 中共享全局变量
- C++ 两个线程,共享几个整数变量
- 为什么动态分配的两个变量的内存位置不是连续的?
- 计算两个uint8_t变量之间差值的最快方法是什么?
- 如何使用C++中不是文字的变量在数字中显示单引号和两个引号?假设 6'2" 英尺
- 是否可以在C++中使用宏交换两个变量的出现?