C/C++ 结构体的内存结构说明
2017-04-18 22:49
225 查看
1、什么是结构体,为什么需要结构体?
结构体的意思就是结构化的数据,源于结构化的数据管理。是人们最初用数据描述世界的一种方式。也是面向对象的根源。在对具有多属性的事物的数据进行处理时,结构化的存储方式,使得处理方法和处理效率大大提高。从最初数据在内存中结构化的安排,到C语言抽象出结构体的概念,再到C++抽象出类的概念,程序世界的一个新的视角就此打开。程序的世界由一维的内存世界,变为多维的对象世界。
2、结构体的声明定义、初始化、使用。
定义例子如下:
struct student{char name[10];int age;} struct student s1,s2;
和用普通类型定义变量一样
struct student{char name[10];int age;} s1,s2;
在定义类型的同时,定义变量。
struct {char name[10],int age;} s1,s2= {"jack",10};
定义结构体时不给出结构体的名字,直接来使用(隐式定义)。
定义的时候初始化,可以直接通过{}给出初始值。否则的话就需要为里面的每一项进行赋值。
3、在了解了结构体之后,
我们不妨来思考这样一个问题:数据类型是什么?
对于数据类型,
我们是用来定义变量的,进而保存我们的数据。它规定了变量所要占用的字节数,以及如何对其内容进行存储。同样的结构体其实就是我们自己定义的类型。C语言允许我们根据实际的事物来定义特定的类型,然后定义这个类型的变量来保存事物的数据。
4、内存结构表示:
首先,结构体变量名就像普通的变量名一样。可以用&取地址,
如果用变量名表示一个结构体变量,那么它实际表示的是前四个字节的内容。所以,为了避免错误,我们使用的时候,就要找出里面的每一项进行使用。
其次,它在保存的时候,为了保持高的内存利用率和快速的存取操作,采用了内存对其的方式进行保存。也就是以域中长度最长的类型为单位申请空间(Visual Studio
的一种方式,可能并不通用,但它给了我们一个提高效率的思路)。
5、结构体使用的两种方式:
用变量名的方式使用:struct
student s; s.a ;s.b;
其中,"."被称为成员分量运算符。
用结构体变量地址的方式:struct student *ps = &s;ps->a;
ps->b;其中,"->"被称为指向运算符
结构体的意思就是结构化的数据,源于结构化的数据管理。是人们最初用数据描述世界的一种方式。也是面向对象的根源。在对具有多属性的事物的数据进行处理时,结构化的存储方式,使得处理方法和处理效率大大提高。从最初数据在内存中结构化的安排,到C语言抽象出结构体的概念,再到C++抽象出类的概念,程序世界的一个新的视角就此打开。程序的世界由一维的内存世界,变为多维的对象世界。
2、结构体的声明定义、初始化、使用。
定义例子如下:
struct student{char name[10];int age;} struct student s1,s2;
和用普通类型定义变量一样
struct student{char name[10];int age;} s1,s2;
在定义类型的同时,定义变量。
struct {char name[10],int age;} s1,s2= {"jack",10};
定义结构体时不给出结构体的名字,直接来使用(隐式定义)。
定义的时候初始化,可以直接通过{}给出初始值。否则的话就需要为里面的每一项进行赋值。
3、在了解了结构体之后,
我们不妨来思考这样一个问题:数据类型是什么?
对于数据类型,
我们是用来定义变量的,进而保存我们的数据。它规定了变量所要占用的字节数,以及如何对其内容进行存储。同样的结构体其实就是我们自己定义的类型。C语言允许我们根据实际的事物来定义特定的类型,然后定义这个类型的变量来保存事物的数据。
4、内存结构表示:
首先,结构体变量名就像普通的变量名一样。可以用&取地址,
如果用变量名表示一个结构体变量,那么它实际表示的是前四个字节的内容。所以,为了避免错误,我们使用的时候,就要找出里面的每一项进行使用。
其次,它在保存的时候,为了保持高的内存利用率和快速的存取操作,采用了内存对其的方式进行保存。也就是以域中长度最长的类型为单位申请空间(Visual Studio
的一种方式,可能并不通用,但它给了我们一个提高效率的思路)。
5、结构体使用的两种方式:
用变量名的方式使用:struct
student s; s.a ;s.b;
其中,"."被称为成员分量运算符。
用结构体变量地址的方式:struct student *ps = &s;ps->a;
ps->b;其中,"->"被称为指向运算符
相关文章推荐
- 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
- C++ class实例的内存结构
- 我的C++ (三) - 空类/结构内存占用情况
- C#传递结构体地址(或者结构体成员的地址)给C/C++ DLL
- [C++基础]内存对齐(字节对齐,结构体对齐)
- C/C++ 内存分配里的 堆和栈 与数据结构里的 堆和栈
- C/C++结构体读文件失败和内存对齐
- [c++] 初始化结构体 赋值结构体 输出结构体各成员
- C++指向结构体变量的指针与链表结构的关系应用
- c++中对象的内存占用说明
- C\C++ 关于FILE结构定义说明
- C++对象的内存结构
- C++内存管理结构
- C++的内存结构
- C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别
- C++ class实例的内存结构
- C++中内存模型的几种存储说明符(auto , register, static ,extern,mutable)
- 结构体的内存对齐方式(结构体大小计算 sizeof)(
- C++ 应用程序 内存结构 --- BSS段,数据段,代码段,堆内存和栈
- 怎么看C++对象的内存结构 和 怎么解密C++的name mangling