当我观察到一个奇怪的行为时,我正在研究结构和它们的指针。在下面的代码中,我创建了一个包含:id、last_name_inital、full_name 和 first_name_inital 的结构。查看 int 和 string 的内存地址工作正常,但查看 chars 会给出损坏的输出。我在显示相同行为的结构外添加了字符。只看一个 char 输出,它的指针输出返回相同的 char,所以没有地址。
#include <iostream>
#include <string>
using namespace std;
struct entry
{
int id = 1;
char last_name_inital = 'S';
string full_name = "August Smith";
char first_name_inital = 'A';
};
int main()
{
entry aug;
entry *p_aug = &aug;
char alpha ='A';
char *p_alpha = α
char sirra ='S';
char *p_sirra = &sirra;
cout << "Printing structure address" << endl;
cout << p_aug << endl;
cout << "\n";
cout << "Printing id and it's address" << endl;
cout << p_aug->id << " " << aug.id << endl;
cout << &p_aug->id << " " << &aug.id << endl;
cout << "\n";
cout << "Printing last_name_inital and it's address" << endl;
cout << p_aug->last_name_inital <<" "<< aug.last_name_inital << endl;
cout <<&p_aug->last_name_inital<<" "<< &aug.last_name_inital << endl;
cout << "\n";
cout << "Printing full_name and it's address" << endl;
cout << p_aug->full_name << " " << aug.full_name << endl;
cout << &p_aug->full_name << " " << &aug.full_name << endl;
cout << "\n";
cout << "Printing first_name_inital and it's address" << endl;
cout << p_aug->first_name_inital <<" "<<aug.first_name_inital<< endl;
cout <<&p_aug->first_name_inital<<" "<<&aug.first_name_inital<< endl;
cout << "\n";
cout << "Printing alpha and it's address" << endl;
cout << *p_alpha << " " << alpha << endl;
cout << p_alpha << " " << &alpha << endl;
cout << "\n";
cout << "Printing sirra and it's address" << endl;
cout << *p_sirra << " " << sirra << endl;
cout << p_sirra << " " << &sirra << endl;
cout << "\n";
}
给出以下输出(使用 geany、g++、linux 编译和编写):
Printing structure address
0x7fff01772360
Printing id and it's address
1 1
0x7fff01772360 0x7fff01772360
Printing full_name and it's address
S S
S S
Printing last_name_inital and it's address
August Smith August Smith
0x7fff01772368 0x7fff01772368
Printing last_name_inital and it's address
A A
A@ A@
Printing alpha and it's address
A A
AS
#w� AS
#w�Printing alpha and it's address
S S
S
#w� S
#w�
每次运行最后的输出都会改变,所以很明显有些东西正在改变。 在线搜索只给出了这个问题,它涉及相同的背景但不是真的或者我不明白。 character pointers in C++
基本上我的主要问题是那里发生了什么,是否可以输出一个字符指针,那么它存储在哪里?
谢谢
编辑:
快速响应解决了如何打印出一个字符的指针地址的问题。通过使用:(void*)(&char_name)
然而,这让我想知道为什么正常字符的 cout
值发生变化,但结构内部字符的值在重新运行时保持不变。特别是因为 cout
结构中 char 'S'
的行为是提到的 operator-overloaded-just-give-back-the-char-itself 但不是用于 'A'
,也不适用于结构外的普通字符。
谁能解释这些差异?甚至这不会发生在你身上?
最佳答案
你可以转换 char *
到 void *
.问题是,operator<<
重载阅读 char *
作为 c_string。
cout << "Printing last_name_inital and it's address" << endl;
cout << p_aug->last_name_inital <<" "<< aug.last_name_inital << endl;
cout << (void*)(&p_aug->last_name_inital) <<" "<< (void*)(&aug.last_name_inital) << endl;
cout << "\n";
关于c++ - 带有字符的奇怪指针行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165606/