结构体——小结
2016-01-15 00:00
204 查看
一,结构体优点如下,
(1)可以包含不同数据类型的一个结构体
(2)相同的结构体变量是可以相互赋值的
(3)节省内存空间
注意:结构体声明的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。
直接内存操作避免了栈空间开辟结构变量空间的需求,节省内存。
(4)效率高
根据反汇编的思想,结构体在栈中是离散的,而数组在栈中是连续的,而访问起来结构体相对快一些,也在一些教材上看到过,说结构体的效率高是拿空间换取时间的,我个人认为,应该是存储和访问方式的不同而使其效率较高。(有更好的说法希望读者朋友们多多指点)
举例: struct data
{
int num;
char name;
float score;
};
data t1,t2;
![](http://static.oschina.net/uploads/img/201601/15103904_hRrq.gif)
![](http://static.oschina.net/uploads/img/201601/15103904_wM60.gif)
一段简单代码
二,结构体的使用方向
主要用于包含不同类型的变量时,比如,学生信息登记表,学生姓名(char),学号(int),年龄(int), 性别(char),成绩(float)等等,这时候就需要用到结构体了。而数组里面的数据类型和长度必须保持一致。
初学,感觉有很多地方很矛盾,在以后的学习当中会逐步深入理解,也希望读者朋友们能指点迷津,一起进步,一起成长!
(1)可以包含不同数据类型的一个结构体
(2)相同的结构体变量是可以相互赋值的
(3)节省内存空间
注意:结构体声明的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。
直接内存操作避免了栈空间开辟结构变量空间的需求,节省内存。
(4)效率高
根据反汇编的思想,结构体在栈中是离散的,而数组在栈中是连续的,而访问起来结构体相对快一些,也在一些教材上看到过,说结构体的效率高是拿空间换取时间的,我个人认为,应该是存储和访问方式的不同而使其效率较高。(有更好的说法希望读者朋友们多多指点)
举例: struct data
{
int num;
char name;
float score;
};
data t1,t2;
![](http://static.oschina.net/uploads/img/201601/15103904_hRrq.gif)
![](http://static.oschina.net/uploads/img/201601/15103904_wM60.gif)
一段简单代码
#include " iostream " #include " string " using namespace std; struct data { int num; char name; float score; }; int main() { data t1,t2,t3; // 定义结构体变量 cin >> t1.num >> t1.name >> t1.score; t2 = t1; // 结构体变量之间相互赋值 t3 = t1; data * p; // 结构体指针 p =& t1; // 指针指向结构体变量t1的内存地址 cout << t1.num << endl << t2.name << endl << t3.score << endl; // 把t1所对应的地址 cin >> p -> name >> p -> num >> p -> score; cout << p -> name << endl << p -> num << endl << p -> score << endl; cout << ( * p).name << endl << ( * p).num << endl << ( * p).score << endl; cin. get (); } 10 ;
二,结构体的使用方向
主要用于包含不同类型的变量时,比如,学生信息登记表,学生姓名(char),学号(int),年龄(int), 性别(char),成绩(float)等等,这时候就需要用到结构体了。而数组里面的数据类型和长度必须保持一致。
初学,感觉有很多地方很矛盾,在以后的学习当中会逐步深入理解,也希望读者朋友们能指点迷津,一起进步,一起成长!
相关文章推荐
- java swing Jtable&log4j
- poj3641(学习了)
- 雅可比迭代法和高斯赛德尔迭代法
- 双向链表内结点的删除(4)
- 数组和链表的区别
- Android手机文件管理
- nginx安装
- JDBC:JabaBean对数据库的操作----增删改查
- 如何在PDF Transformer+中将PDF转换成Excel
- OC学习日总结
- Objective-c学习日总结之与C的区别及类与对象的定义,类的声明及调用方法
- Math.min与Math.min.apply(null,arguments)区别
- Oracle创建表空间和授权
- PL/SQL 连接 Oracle64位
- PL/SQL查询数据集乱码
- Maven安装Oracle驱动jar包到本地工厂
- 关注用户体验,实现更多价值
- happens-before简介
- Java中的等待/通知机制(wait/notify)
- RHEL-5.9使用Centos的yum源(转)