cout 打印内存地址而不是值
cout prints memory address instead of value
我看到了另一个与此基本相同的问题,但是它包含指针,我的代码中没有指针。 我正在尝试练习使用类,特别是访问修饰符。 我在一个名为 Bankaccount 的头文件中创建了一个类。当我尝试打印出私有变量"balance"时,它会打印出我认为是地址的内容,因为它是一堆随机数,但是其中没有像我见过的大多数十六进制地址那样的字母。我不太确定为什么会发生这种情况。 我正在使用Microsoft Visual Studios 2019。我已经包含了下面的所有代码(源文件和头文件(。 如果有人能让我知道为什么它打印变量"余额"的地址,那么请告诉我。 另外,您想对我的任何代码添加任何建设性的批评(因为我是初学者(,请添加。 非常感谢。
头文件
#pragma once
#include <iostream>
using namespace std;
class Bankaccount {
public:
Bankaccount() {
int choice;
cout << "Constructor run properly." << endl;
cout << "You have created a bank account." << endl;
cout << "What will the name of the account be? Name: ";
cin >> accoutName;
cout << "What would you like to do with this account?nDeposit: Press 1" << endl;
cin >> choice;
if (choice == 1) {
int depo;
cout << "Deposit amount: ";
cin >> depo;
deposit(depo);
cout << "$" << depo << " dollars has been added to your account." << endl;
}
}
int deposit(int deposit) {
balance += deposit;
return balance;
}
void getBalance() {
cout << "your balance is: " << balance << endl;
}
~Bankaccount() {
cout << "Destructor run properly." << endl;
}
private:
string accoutName;
int balance;
};
源文件
#include <iostream>
#include "bank.h"
int main() {
Bankaccount Joseph;
Joseph.getBalance();
}
这不是为balance
打印的内存地址。 它是未初始化变量的输出。
问题是创建Bankaccount
对象时balance
未初始化。 构造Bankaccount
对象时,应初始化balance
:
class Bankaccount
{
int balance;
public:
Bankaccount() : balance(0) {
// ...
}
};
当您这样做时,Bankaccount Joseph;
Bankaccount
对象会在堆栈上分配空间(在这里,这意味着为其成员balance
和accoutName
分配空间(。构造对象时,构造函数负责初始化所有成员以获得正确的初始值。例如,创建Bankaccount
时,将balance
设置为0
。如果不这样做,则仅声明内存但未初始化(它可能包含一些垃圾值 - 可能来自碰巧使用此空间的先前函数(。
在您的代码中,balance
未设置为0
- 而是有一些垃圾。当用户输入新的deposit
金额时,它将被添加到此垃圾中,并生成一个值,结果看起来也像垃圾值。您可以在输入构造函数的第一件事时执行此操作。
Bankaccount() {
deposit = 0;
(请注意:string
类型的accountName
不是原始数据类型,它是在其他地方构造的,它的构造函数将确保它一开始就""
包含一个空字符串。它只是包装一个托管数组char
。
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 打印字符数组地址的正确方法
- cout 打印内存地址而不是值
- 如何访问头文件中类的组件并打印它们的地址?
- 为什么当我尝试打印地图内容时,我得到的是地址而不是 C++ 中的值?
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 为什么这是打印内存地址而不是值
- 将指针传递给函数 - 为什么我无法打印地址?
- 如何使用Qt为每个地址打印二进制文件
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- 如何打印指针的地址?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 如何在 2D 字符数组中打印 [x][y] 元素的地址?(C++)
- C++ Visual 工作室中的逻辑错误.阵列打印的是地址而不是内容
- 为什么'std::string'中第一个元素的地址打印为整个字符串?
- C 指针地址打印
- 内存地址打印以及字符串
- GDB:显示函数将我的 {type} 的地址打印为整数——想改成十六进制
- 如何使用内存地址打印变量的值
- LPWSTR在cout中作为地址打印