结构体

声明时: {;}
初始化时:{,}
结构体声明:

//example:
struct dolly
{char name[20]; float volume; double price;
}; // }inf;

结构体使用:
(struct可以省略)

//example:
struct dolly cat;
dolly hat = {"wwwdfwf",1.88,23.33}; //省略struct 等号也可以省略
//dolly hat("SSS",1.2,23);//必须给出相应有参构造才行。
cat = hat;//copy操作;对成员是地址的结构体还是不要这样copy;会使得两个结构体对象指向同一个地址,类似情况在class中也要考虑,此时应该重写 operator=();
//cat.name;cat.volume 可以来查看,修改,对象的成员值;

结构体数组:
dolly gifts[100]; ---- ---- 创建100个dolly类,即数组的每个元素都是dolly类;

//example
dolly guests[2] = { {"sfwe",0.2,0.4}, {...}, {...},};
// dolly guestss[2] ={dolly("ddd",0.2,0.3),...};
guests[0].name="xxx";

struct内存对齐
目的: 为了提高内存的访问效率。
对齐原则:结构体的起始地址能够被其最宽的成员大小整除;结构体每个成员相对于起始地址的偏移要能被自身大小整除(char可以从任何字节地址开始,2字节short必须从偶数地址开始,4字节的int或float必须从被4整除的地址开始,而8字节的long或double必须从被8整除的地址开始。),如果不能,就需要在前一个成员后面补充字节;结构体总体大小能够被最宽的成员的大小整除,如果不能,也要在后面补充。但实际上对齐数 = 编译器默认值与成员自身大小的较小值。

struct A{int a;char b;double c;
};
//int可以从偏移0开始,char b可以从偏移4开始,但是double c不能从偏移5开始,只能从偏移8开始,所以会先补齐3个,到偏移8,结束时的偏移量16,故最终大小为16;
sizeof(A) 是16字节,而不是4+1+8 = 13字节。

结构体指针:

//example:
dolly hat = {"wwwdfwf",1.88,23.33};//创建结构体变量
dolly * p = &hat;//通过指针指向结构体变量;
cout << p->name << p->volume<<endl;//通过指针访问结构变量的数据,使用->来访问;
dolly* q = new dolly{"dsdf",1.2,22,22};

结构体嵌套结构体:

struct student{string name; int age; int score;};
struct teacher {int id; string name; int age; struct student stu;};
teacher t;
t.id =1000;
t.name="li";
t.stu.name="小王";
t.stu.age = 20;

结构体作函数参数:

struct student{ string name; int age; int score;
};
void printStudent1(struct student s){std::cout<<s.mame<<std::endl;
} //值传递 (函数中用.调用)
void printStudent2(struct student &s){std::cout<<s.mame<<std::endl;
} //引用传递 (函数中用.调用)
void printstudent3(struct student * p ){std::cout<<p->name<<std::endl;} //地址传递 (函数中用->来调用)
int main()
{student s; s.name="xxx";s.age=20; s.score = 60;printStudent1(s);return 0;
}

其他相关知识

struct和class高度相似;但也有所区别:1. struct 默认权限是public;class的默认权限是private;2.struct即使没有对应的构造函数也可以使用{}进行初始化,但是class不行。

//example
struct Student
{public://可以不写,默认的string name;int age;Student():name("xsd"),age(10),score(99){};Student(string s,int a,double sco):name(s),age(a),score(sco){};private:double score;//外部无法访问};Student s;//其中name = "xsd" ; age = 10 ; score(99)

上面例子中在struct的二个构造函数使用到初始化列表的方法 —这种方法只能用于构造函数,class或者struct

c++知识点总结--结构体相关推荐

  1. c 结构体 不允许使用不完整的类型_C语言必学知识点 quot;结构体quot;详细解析!...

    结构体是经常用到的数据类型,使用频率不亚于指针,所以需要重视,不过用法非常简单. 一.什么是结构体 ☀ 在前面的时候已经介绍了C语言中的数组,用法跟其他语言差不多.当一个整体由多个数据构成时,我们可以 ...

  2. c++结构体嵌套结构体_Go学习每日一问(13)-结构体嵌套

    每次学习并整理一个Golang的知识点,每天进步一点点.今天学习一个go结构体嵌套的知识点. 日省吾身 1.下面这段代码的输出结果? func main() { a := -7 b := +7 fmt ...

  3. C语言基础1:初识C语言(转义、注释;数组、操作符、反码、补码、static、define、指针、结构体常变量;局部变量;作用域、生命周期)

    文章目录 C语言基础1:初识C语言 1.C语言简介 1.1什么是C语言 1.2C语言的发展 2.第一个C语言程序 2.1创建项目 2.2添加源文件 2.3写代码 3.数据类型 4.变量.常量 4.1定 ...

  4. 初识C语言#define、指针、结构体

    #define 定义常量和宏 define是一个预处理指令. 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为"宏".被定义为"宏"的标识符称为& ...

  5. struct结构体在32位系统和64位系统的存储空间的不同

    在64位操作系统上,如下数据结构占用的存储空间大小为多少字节: 1 2 3 4 5 6 struct A{    unsigned int a;    char b[2];    double c; ...

  6. 第16周实践项目三——点结构体(2)

    问题及代码 (2)请编写程序,输入两点p1和p2的坐标,输出两点之间的距离,以及p1关于x轴的对称点,p2关于原点的对称点,运行结果如下图所示: /*烟台大学计算机学院 2016 作者: 马春澎完成日 ...

  7. [ C语言 ]指针---结构体(struct)---分支语句(1)---初识C语言末尾

    文章目录 前言 一,指针 二,结构体(struct) 三,分支语句(选择结构) 总结​​​​ 前言 本篇文章主要记录指针末尾,结构体,和分支语句(选择结构) --------------------- ...

  8. C语言中的结构体——struct

    结构体是C语言中很重要的知识点,结构体使得C语言有能力去描述复杂类型.         我们知道C语言中有许多类型,如:int.char.double······,但是现实世界中存在很多复杂的对象,不 ...

  9. c语言结构体教案,结构体——教学设计

    <结构体--教学设计>由会员分享,可在线阅读,更多相关<结构体--教学设计(7页珍藏版)>请在人人文库网上搜索. 1.课堂教学设计表章节名称结构体学科C语言程序设计授课班级大一 ...

最新文章

  1. Windows Phone 7 自动完成输入框控件AutoCompleteBox
  2. 值传递 引用传递(传地址,传引用)的区别
  3. RxJava 教程第一部分:入门之 关键的类
  4. Android Studio 分析器详解
  5. 排序算法java 简书_史上最全经典排序算法总结(Java实现)
  6. Windows Message Queue(优先队列)
  7. javafx透明边框_JavaFX技巧6:使用透明颜色
  8. 使用Maven进行硒测试自动化
  9. 网线重新插拔后恢复正常_生活小窍门之网线不够长怎么办,毕亚兹网线连接器轻松搞定...
  10. 如何打造顶级目标检测算法?百度官方揭秘 ECCV2020 双料冠军的理论与实践
  11. pdf转html插件~~~pdf2htmlEX安装,配置及使用
  12. 河流淹没分析_【专题归纳】关于河流地貌的知识点整理!附中国十二条著名江河名称的由来...
  13. C++中 _T 的用途
  14. 神经网络预测python_bp神经网络预测python
  15. 账龄分析表excel模板_老会计分享财务报表及EXCEL会计报表分析系统模板!收藏领取!...
  16. 苹果亮度自动调节怎么关闭_Android 亮度自动调节是如何实现的?
  17. 计算机网络实验4 — 网线制作
  18. 3:AngularJS:模糊查询过滤内容,下拉菜单排序,过滤敏感字符,验证判断后添加表格信息
  19. 第三周上机实践项目 项目4--委派任务
  20. java 中prehandle_Spring MVC中拦截器HandlerInterceptorAdapter中的preHandle方法

热门文章

  1. NB-IoT 设备实时反向控制方案分析
  2. 《约会专家》拖车【约会宝典】总结
  3. 讲讲“工业4.0”的故事
  4. FreeCAD软件安装
  5. Python 教程之 为什么 Google 和 YouTube 使用 Python
  6. hover前有无空格的区别
  7. 二阶系统阻尼比与稳定性的关系
  8. 【Java】int a = 2; 输出 a+++1 的结果是多少? 以及输出之后a的值是多少?
  9. XAMPP下载地址共享
  10. Connext DDS开发指南(5)基本QoS策略