对嵌入式开发C语言结构体的一点总结
今天冬至居然不上班,公司的良心啊!
这回有心情写博客和日志了,好了,废话不多说。直接看下文:
鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少。话说,基础什么的比你会更牛逼的算法更重要,基础不牢,地动山摇!!最本质的东西就是基础,不要学到越高级的东西却忘了最本质的东西,这样就失去了学习的意义。
接下来我将对结构体最基础的东西,如何初始化,如果打印信息做一个最基础的总结,当然结构体在内核中到处可见,随便一个可能都是你不认识的东西,归根到底,还是基础:
好了,直接上代码,我们对这个程序进行分析。
#include <stdio.h>
#include <stdlib.h>
#define NAMESIZE 32
//定义一个结构体
struct simp_st
{
int i ;
float f ;
char ch ;
};
struct birthday_st
{
int year ;
int month ;
int day ;
};
struct student_st
{
int id ;
char name[NAMESIZE];
struct birthday_st stu1 ; //上面对struct birthday这个结构体进行定义了,这里才能用
int math ;
int chinese ;
};
int main(void)
{
//结构体初始化的第一种方式
//这种方式初始化符号采用的是 .
struct simp_st a ;
a.i = 100 ;
a.f = 10.2f ;
a.ch = 'a' ;
struct simp_st a1 = {.i=200 , .f=10.1 , .ch='d'};
//结构体初始化的第二种方式
//这里定义了一个结构体变量b ,然后对里面的成员进行初始化。
struct simp_st b = {100 , 10.3f , 'b'};
//结构体初始化的第三种方式--->指针
//很多人直接就是struct simp_st *c ;其实这样是很危险的,你不知道的时候就定义了一//个野指针,所以建议定义任何类型的指针最好还是赋个空值。
struct simp_st *c = NULL;
//这里是对结构体指针变量分配相应的空间,因为指针本身没有空间。但是注意分配完//空间后当程序执行完了之后要进行内存释放,否则会造成内存泄漏!这点一点要记牢//了!
c = malloc(sizeof(struct simp_st));
//指针定义的初始化是 -> 这个符号
c->i = 200 ;
c->f = 10.4f ;
c->ch = 'c';
//结构体嵌套初始化方式
//注意啦,这种方式最常见了,在公司一个项目中,你不可能看到有单一的结构体
//结构体都是嵌套组合在一起的,内核也是一样,结构体中还有结构体
struct student_st stu1= {
1000 ,
"Yang-Yuan-Xin",
{2015,7,24},
99,
88,
};
//下面输出我就不多说了,非常简单!
printf("1.结构体初始化的第一种方式输出:\n");
printf("a.i=%d\na.f=%.2f\na.ch=%c\n",a.i , a.f , a.ch) ;
printf("a1.i=%d\na1.f=%.2f\na1.ch=%c\n",a1.i , a1.f , a1.ch);
printf("2.结构体初始化的第二种方式输出:\n");
printf("b.i=%d\nb.f=%.2f\nb.ch=%c\n",b.i , b.f , b.ch) ;
printf("3.结构体初始化的第三种方式输出-->指针:\n");
printf("c->i=%d\nc->f=%.2f\nc->ch=%c\n",c->i ,c->f ,c->ch);
printf("4.结构体嵌套形式输出:\n");
printf("stu1.id=%d\nstu1.name=%s\nstu1.stu1.year=%d\nst1.stu1.month=%d\nstu1.stu1.day=%d\n",stu1.id , stu1.name,stu1.stu1.year,stu1.stu1.month,stu1.stu1.day);
free(c);
return 0 ;
}
代码和注释都浏览完了,有没有什么体会呢?是不是觉得恍然大悟了?这几种方法就是使用结构体最基础最常用的方法,也是初学者上手结构体最快的方法。
关于结构体的一些深入的知识,比如说位段这个概念,还有结构体字节对齐,一般在32位操作系统中,结构体对齐方式默认是以4个字节进行对齐。还有结构体与共用体混合使用,结构体数组,结构体里包含函数等等,这些需要往后再开发或者学习中慢慢去总结和体会,由于时间限制,我就不多说了,要是有兴趣,我们可以一起讨论讨论!!!
对嵌入式开发C语言结构体的一点总结的更多相关文章
- 嵌入式开发—C语言面试题
嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929 1. 用预处理指令#define 声明一个常数,用 ...
- c语言结构体
[C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...
- 06. Go 语言结构体
Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...
- 漫谈C语言结构体
相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...
- 漫谈C语言结构体【转】
相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...
- 漫谈C语言结构体struct、公用体union空间占用
先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...
- 浅谈c语言结构体
对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...
- 解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
随机推荐
- JAVA Eclipse使用Maven构建web项目详解(SSM框架)
tips: 启动项目后,welcome-file的链接即为测试用例 部署maven web项目 Eclipse使用Maven构建web项目详解 pom.xml添加webapp依赖: <depen ...
- Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》
之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...
- Dubbo框架应用之(四)--Dubbo基于Zookeeper实现分布式实例
上三篇文章主要是解决了概念性的补充和学习,充分结合实战来深入理解 入门实例解析 第一:provider-提供服务和相应的接口 创建DemoService接口 package com.unj.dubbo ...
- proc文件系统探索 之 根目录下的文件[二]
包括对proc根目录下stat,uptime,swaps三个文件的解析. /proc/stat 文件包含了系统启动后的一些系统统计信息. Cat /proc/stat: cpu 77781 1077 ...
- ROS(indigo)RRT路径规划
源码地址:https://github.com/nalin1096/path_planning 路径规划 使用ROS实现了基于RRT路径规划算法. 发行版 - indigo 算法在有一个障碍的环境找到 ...
- Spring之AOP模块
AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要特征 Spring推荐使用接口编程 Spring提供三种拦截器:方法前拦截器.返回后拦截器.异 ...
- 详解EBS接口开发之库存事务处理采购接收和退货
(一)接收&退货常用标准表简介 1.1 常用标准表 如下表中列出了与采购接收&退货导入相关的表和说明: 表名 说明 其他信息 RCV_TRANSACTIONS 采购接收事务表 事务 ...
- Scikit-learn:scikit-learn快速教程及实例
http://blog.csdn.net/pipisorry/article/details/52251305 :7] y = dataset[:,8] 我们将在下面所有的例子里使用这个数据组,换言之 ...
- 移动开发测试工具——Bugtags的集成
移动开发测试工具--Bugtags 官网:https://bugtags.com/ 注册开发者账号 注册账号并激活邮箱,都会就不多做介绍了. 创建应用 创建完账号以后会提示添加应用,点击添加 添加应用 ...
- java虚拟机 jvm java堆 方法区 java栈
java堆是java应用程序最密切的内存空间.几乎所有的对象都存在堆中.java堆完全自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要显式释放. 根据java垃圾回收机制的不同,java堆可能 ...