嵌入式软件开发培训笔记——C高级 结构体与共用体
(1)、结构体
基本类型 int、double、char、float、short、long等等
复合类型 数组、结构体
指针类型
空类型
1)定义结构体,不会在内存内给分配空间
struct s1 { char ch; int i; float f; char array[3]; }; |
struct s2 { struct s1 s; //嵌套定义 char ch; int i; float f; }; |
2)定义结构体变量
struct s1 varname;
3)#define 与 typedef定义别名替代 struct name
4)结构体初始化
5)结构体赋值
先定义结构体变量,然后用变量.结构体子成员名称
6)指针与结构体
7)字节对齐的概念
变量在内存里排放时有对齐的概念,所谓某个变量是N字节对齐的,就是说该变量的“内存起始地址值”%N = 0;
a、基本类型自身对齐值
基本类型:char 1 short 2 (32bitmachine——int float long 4 double 8)
结构体类型:成员中基本类型的自身对齐值最大的那个值。
b、指定对齐值
使用#pragma pack(N)或__attribute__((aligned(N)))在定义结构体时指定对齐值N。但Gcc对32位机缺省情况下指定对齐值为4。
c、有效对齐值
最终决定数据存放地址方式的值,取值对象为自身对齐值和指定对齐值中较小的那个值。
srtuct s {
char c; //1
int i; //4 按4对齐
};
那么sizeof(struct s) = 8;
(2)、共用体(联合体)union
各成员在内存中共用一块空间,与结构体在内存中使用空间情况相反。
程序运行时无时不刻在访问内存,深刻理解内存管理机制有利于更好地学习 C
嵌入式软件开发培训笔记——C高级 结构体与共用体相关推荐
- 嵌入式软件开发培训笔记——C高级 指针和函数
1.函数指针 2.指针函数 Int *function(int a,char *b) 函数返回值是一个指针 Int *p; p = function(c,&d); 附:递归 在一个函体体 ...
- 嵌入式软件开发培训笔记——C高级 开发环境
(1)GNU工具: a)编译工具--GCC.G++: b)调试工具--GDB: c)软件工程工具--make.makefile: d)其他工具--多个目标文件链接成可执行文件的链接器 e)GNU资源: ...
- 嵌入式软件开发培训笔记——C高级 预处理类型重定义
(1)#include (2)#define (3)#if,#else,#elif,#endif 理解c语言中if,else,elseif,但不要忘记在条件编译时要加上endif (4)#ifdef, ...
- 嵌入式软件开发培训笔记——Java第二天(运算符、程序结构、数组与继承)
一.运算符 分割符:,.:.[].() 算术运算符:+.-.*./.%.++.-- 关系运算符:>.<.>=.<=.==.!= 布尔逻辑运算符:!.&.|.^.& ...
- 嵌入式软件开发培训笔记——java第五天(API——math/string/集合/日期时间以及java线程)
目录 掌握命令行参数的使用 掌握Math类中常用的方法 掌握String/StringBuffer/StringBuilder的用法 掌握几种常用集合类的用法 掌握日期和时间处理 1.命令行参数 Ja ...
- 嵌入式软件开发培训笔记——Linux下SQLite3数据库编程
1.基本概念 数据库&数据库管理系统(DBMS) 关系型DBMS和SQL 通用型DBMS&嵌入式DBMS 2.SQLite 简介 命令行操作 库函数编程操作 3.数据库基本概念 1)数 ...
- 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写
bootloader原理和开发-->kernel构建-->文件系统/根文件系统(filesystem/rootfs) APP 一.配置交叉编译环境(可参考嵌入式Linux移植与驱动开发co ...
- 嵌入式软件开发培训笔记——boot原理与u-boot 基于Cortex_A8核的S5PC100芯片
一.boot原理 1.解决系统启动 (参考s5pc100手册 ---> 2.1节 irom code) The boot loader is divided into the BL0(1st ...
- 嵌入式软件开发培训笔记——Java第三天(方法重载、对象的构造与初始化过程分析、封装等)
一.掌握方法重载(Overload) 同一个类中方法名相同时,称为方法的重载(Overload) 特点:1.参数列表不同 1)参数类型不同 ...
最新文章
- 陈键飞:基于随机量化的高效神经网络训练理论及算法
- java io 文件是否存在,代码实例Java IO判断目录和文件是否存在
- doc转docx文件会乱吗_Word文档doc与docx的区别
- ArcGIS for window mobile 数据打开
- 仿京东商城登录页面_京东e卡如何使用?
- 广西桂林平均工资是多少?
- python列表功能默写_python基础学习——列表list的功能
- JAVA_if或者怎么用_Java条件语句if的使用方法介绍
- md5加盐(MySQL,PHP)
- php敏感代码屏蔽,PHP敏感词汇屏蔽或替换
- Windows Server 2008安装nodejs
- 基于h a d oop的海量图片存储模型 的分析和设计
- BZOJ3654 : 图样图森破
- 尚学堂视频笔记一:java面向对象基础和java基础知识
- python---酒鬼漫步
- oracle新书 罗敏_Oracle Acs资深顾问罗敏 老罗技术核心感悟:分表还是分区?
- waf 防火墙限制_WAF防火墙设备指标及参数说明
- 关于在WIN10中使用照片查看器的问题
- shell - 在文本中的前一行或后一行添加一行内容,指定行前后增加一行内容
- Visustin(自动生成流程图)使用说明
热门文章
- 全国计算机高新技术考试证书有什么作用?
- 第六季完美童模 代言人段沫如 全球赛个人风采展示
- 前端骨架屏自动生成方案(很实用!收藏)
- does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-
- 平淡的感动:先挂电话的那个人……
- 使用计算机进行数值运算 可根据需要达到,计算机统考题库.pdf
- 明日之后(C++,可复制)
- 15.说说你对slot的理解?slot使用场景有哪些?
- 铜芯导体正常工作时的温度问题
- STC 51单片机46——看门狗测试