#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编译和编写):
打印结构地址
0x7fff01772360
打印ID及其地址
1 1
0x7fff01772360 0x7fff01772360
打印full_name及其地址
S S
S S
打印last_name_inital及其地址
八月史密斯八月史密斯0x7fff01772368 0x7fff01772368
打印last_name_inital及其地址
A A
A @ A @
打印alpha及其地址
A A
AS
#w� AS
#瓦特打印alpha及其地址
S S
取值
#w� S
#瓦特
在每次运行时,最后一次输出都会发生变化,所以显然有些事情在变化 在线搜索只给出了这个问题,这种问题触及了相同的背景但不是真的,或者我没有得到它。 character pointers in C++
基本上我的主要问题是那里发生了什么,是否可以输出一个字符指针,所以它存储在哪里?
谢谢
修改
快速响应解决了如何打印出char的指针地址的问题。使用:(void*)(&char_name)
然而,它让我想知道为什么正常字符的cout
值会发生变化,但结构内部的字符值在重新运行时保持不变。特别是因为带有char 'S'
的结构中cout
的行为是提到的运算符重载 - 只是给后面的char本身而不是'A'
而不是{{1}}对于结构外的正常字符。
任何人都可以解释这些差异吗?或者甚至不会发生这种情况吗?
答案 0 :(得分:3)
您可以将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";
答案 1 :(得分:0)
ostream& operator<< (ostream& os, const char* s);
是写char
非地址的序列,强制转换为void*
以获取地址。
答案 2 :(得分:0)
通常情况下,地址因程序执行而异,因为操作系统碰巧有不同的内存位置,或出于安全原因故意在数据周围进行混洗。
检查指针值仅对比较同一程序实例中的指针非常有用:例如,p_aug
和&aug
具有相同的值。