关于嵌套结构
about Nested Structures C++
我想学习c++,这是我的初学者问题。
#include <iostream>
#include <string>
using std::cout;
using std::endl;
struct student{
struct address{
int no;
std::string city; //problem is here
};
char grade;
int num;
address *addr;
};
int main(){
student st1;
student *pSt1 = &st1;
pSt1->grade = 'A';
pSt1->num = 1234;
pSt1->addr->no = 123;
pSt1->addr->city = "Imladris";
return 0;
}
它崩溃了,但是如果我这样改变std::string city
:
struct student{
struct address{
std::string city; // here
int no;
};
char grade;
int num;
address *addr;
};
它不会崩溃并返回0…在这两种情况下都没有错误或警告。也许,这里没有必要使用指针,但正如我所说,我正在学习c++。这是一个关于指针/结构体的示例代码。
我知道如何修复它,但我想知道为什么它坏了。我改变了字符串city的声明顺序,它没有崩溃。为什么?
您刚刚遇到了未定义行为这个术语。代码的最终结果依赖于编译器和平台。对未指定值的指针解引用(如这里提到的)被认为是无法预测操作结果的情况之一。
保留嵌套结构,但将其添加到成员变量声明中:
address *addr = new address();
或者一个更好的方法是使用它作为用户@tobi303提到:不要声明它为一个指针,只是address
的一个实例代替:
address addr;
但是这样使用:
pSt1->addr.no = 123; // set
pSt1->addr.city = "Imladris"; // set
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 用C#中的并集模拟C++嵌套结构
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- Lambda 捕获、初始值设定项和嵌套结构
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 重载嵌套结构/类的流插入运算符
- C++将结构传递给函数以访问嵌套结构
- C++ 在外部使用嵌套结构实现类函数
- 嵌套结构,从由空行分隔的文件中读取数据
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 如何创建结构的结构结构,等等嵌套多个结构?
- 嵌套在联合中的结构嵌套在 C 中的结构中
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- C++中的嵌套结构
- 嵌套的模板结构构造函数实现
- 使用嵌套结构初始化并集
- C++ 中的嵌套结构函数
- C++中匿名类型的嵌套结构