繁体   English   中英

C++ 编译器为两个变量提供相同的内存位置

[英]C++ compiler giving same memory location to two variables

以下是我用四个变量定义结构的代码。 前两个是每个有 3 个元素的数组。 其他两个变量是标量。 我尝试使用 vc++、g++ 和在线编译器来编译此代码。 然而,对于所有三种情况,'vel' 数组的最后一个元素的内存地址和变量 'kinetic' 的地址结果是相同的。 这是代码。

#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] <- 第一个条目
vel[1] <- 第二个条目
vel[2] <- 第三个条目
vel[3] <- 第四个条目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM