对嵌入式开发C语言结构体的一点总结

MathJax.Hub.Config({ showMathMenu: false });

今天冬至居然不上班,公司的良心啊!偷笑这回有心情写博客和日志了,好了,废话不多说。直接看下文:

鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少。话说,基础什么的比你会更牛逼的算法更重要,基础不牢,地动山摇!!最本质的东西就是基础,不要学到越高级的东西却忘了最本质的东西,这样就失去了学习的意义。

接下来我将对结构体最基础的东西,如何初始化,如果打印信息做一个最基础的总结,当然结构体在内核中到处可见,随便一个可能都是你不认识的东西,归根到底,还是基础:

好了,直接上代码,我们对这个程序进行分析。奋斗


  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #define NAMESIZE  32  
  4. //定义一个结构体  
  5. struct simp_st  
  6. {  
  7.     int i ;  
  8.     float f ;  
  9.     char ch ;  
  10. };  
  11.   
  12. struct birthday_st  
  13. {  
  14.     int year ;  
  15.     int month ;  
  16.     int day ;  
  17. };  
  18.   
  19. struct student_st  
  20. {  
  21.     int id ;  
  22.     char name[NAMESIZE];  
  23.     struct birthday_st stu1 ;      //上面对struct birthday这个结构体进行定义了,这里才能用  
  24.     int math ;  
  25.     int chinese ;  
  26. };  
  27.   
  28. int main(void)  
  29. {     
  30.     //结构体初始化的第一种方式  
  31.     //这种方式初始化符号采用的是 .  
  32.     struct simp_st a ;  
  33.     a.i = 100 ;  
  34.     a.f = 10.2f ;  
  35.     a.ch = ‘a’ ;  
  36.     struct simp_st a1 = {.i=200 , .f=10.1 , .ch=’d’};     
  37.     //结构体初始化的第二种方式  
  38.     //这里定义了一个结构体变量b ,然后对里面的成员进行初始化。  
  39.     struct simp_st b = {100 , 10.3f , ‘b’};  
  40.     //结构体初始化的第三种方式—>指针  
  41.     //很多人直接就是struct simp_st *c ;其实这样是很危险的,你不知道的时候就定义了一//个野指针,所以建议定义任何类型的指针最好还是赋个空值。  
  42.     struct simp_st *c = NULL;  
  43.     //这里是对结构体指针变量分配相应的空间,因为指针本身没有空间。但是注意分配完//空间后当程序执行完了之后要进行内存释放,否则会造成内存泄漏!这点一点要记牢//了!  
  44.     c = malloc(sizeof(struct simp_st));  
  45.     //指针定义的初始化是 -> 这个符号  
  46.     c->i = 200 ;  
  47.     c->f = 10.4f ;   
  48.     c->ch = ‘c’;  
  49.     //结构体嵌套初始化方式  
  50.     //注意啦,这种方式最常见了,在公司一个项目中,你不可能看到有单一的结构体  
  51.     //结构体都是嵌套组合在一起的,内核也是一样,结构体中还有结构体  
  52.     struct student_st  stu1= {  
  53.         1000 ,  
  54.         “Yang-Yuan-Xin”,  
  55.         {2015,7,24},  
  56.         99,  
  57.         88,  
  58.     };    
  59.     //下面输出我就不多说了,非常简单!  
  60.     printf(“1.结构体初始化的第一种方式输出:\n”);  
  61.     printf(“a.i=%d\na.f=%.2f\na.ch=%c\n”,a.i , a.f , a.ch) ;  
  62.     printf(“a1.i=%d\na1.f=%.2f\na1.ch=%c\n”,a1.i , a1.f , a1.ch);  
  63.     printf(“2.结构体初始化的第二种方式输出:\n”);  
  64.     printf(“b.i=%d\nb.f=%.2f\nb.ch=%c\n”,b.i , b.f , b.ch) ;  
  65.     printf(“3.结构体初始化的第三种方式输出–>指针:\n”);  
  66.     printf(“c->i=%d\nc->f=%.2f\nc->ch=%c\n”,c->i ,c->f ,c->ch);  
  67.     printf(“4.结构体嵌套形式输出:\n”);  
  68.     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);  
  69.     free(c);  
  70.     return 0 ;  
  71. }  
#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个字节进行对齐。还有结构体与共用体混合使用,结构体数组,结构体里包含函数等等,这些需要往后再开发或者学习中慢慢去总结和体会,由于时间限制,我就不多说了,要是有兴趣,我们可以一起讨论讨论!!!





            </div>
MathJax.Hub.Config({ showMathMenu: false });

今天冬至居然不上班,公司的良心啊!偷笑这回有心情写博客和日志了,好了,废话不多说。直接看下文:

鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少。话说,基础什么的比你会更牛逼的算法更重要,基础不牢,地动山摇!!最本质的东西就是基础,不要学到越高级的东西却忘了最本质的东西,这样就失去了学习的意义。

接下来我将对结构体最基础的东西,如何初始化,如果打印信息做一个最基础的总结,当然结构体在内核中到处可见,随便一个可能都是你不认识的东西,归根到底,还是基础:

好了,直接上代码,我们对这个程序进行分析。奋斗


  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #define NAMESIZE  32  
  4. //定义一个结构体  
  5. struct simp_st  
  6. {  
  7.     int i ;  
  8.     float f ;  
  9.     char ch ;  
  10. };  
  11.   
  12. struct birthday_st  
  13. {  
  14.     int year ;  
  15.     int month ;  
  16.     int day ;  
  17. };  
  18.   
  19. struct student_st  
  20. {  
  21.     int id ;  
  22.     char name[NAMESIZE];  
  23.     struct birthday_st stu1 ;      //上面对struct birthday这个结构体进行定义了,这里才能用  
  24.     int math ;  
  25.     int chinese ;  
  26. };  
  27.   
  28. int main(void)  
  29. {     
  30.     //结构体初始化的第一种方式  
  31.     //这种方式初始化符号采用的是 .  
  32.     struct simp_st a ;  
  33.     a.i = 100 ;  
  34.     a.f = 10.2f ;  
  35.     a.ch = ‘a’ ;  
  36.     struct simp_st a1 = {.i=200 , .f=10.1 , .ch=’d’};     
  37.     //结构体初始化的第二种方式  
  38.     //这里定义了一个结构体变量b ,然后对里面的成员进行初始化。  
  39.     struct simp_st b = {100 , 10.3f , ‘b’};  
  40.     //结构体初始化的第三种方式—>指针  
  41.     //很多人直接就是struct simp_st *c ;其实这样是很危险的,你不知道的时候就定义了一//个野指针,所以建议定义任何类型的指针最好还是赋个空值。  
  42.     struct simp_st *c = NULL;  
  43.     //这里是对结构体指针变量分配相应的空间,因为指针本身没有空间。但是注意分配完//空间后当程序执行完了之后要进行内存释放,否则会造成内存泄漏!这点一点要记牢//了!  
  44.     c = malloc(sizeof(struct simp_st));  
  45.     //指针定义的初始化是 -> 这个符号  
  46.     c->i = 200 ;  
  47.     c->f = 10.4f ;   
  48.     c->ch = ‘c’;  
  49.     //结构体嵌套初始化方式  
  50.     //注意啦,这种方式最常见了,在公司一个项目中,你不可能看到有单一的结构体  
  51.     //结构体都是嵌套组合在一起的,内核也是一样,结构体中还有结构体  
  52.     struct student_st  stu1= {  
  53.         1000 ,  
  54.         “Yang-Yuan-Xin”,  
  55.         {2015,7,24},  
  56.         99,  
  57.         88,  
  58.     };    
  59.     //下面输出我就不多说了,非常简单!  
  60.     printf(“1.结构体初始化的第一种方式输出:\n”);  
  61.     printf(“a.i=%d\na.f=%.2f\na.ch=%c\n”,a.i , a.f , a.ch) ;  
  62.     printf(“a1.i=%d\na1.f=%.2f\na1.ch=%c\n”,a1.i , a1.f , a1.ch);  
  63.     printf(“2.结构体初始化的第二种方式输出:\n”);  
  64.     printf(“b.i=%d\nb.f=%.2f\nb.ch=%c\n”,b.i , b.f , b.ch) ;  
  65.     printf(“3.结构体初始化的第三种方式输出–>指针:\n”);  
  66.     printf(“c->i=%d\nc->f=%.2f\nc->ch=%c\n”,c->i ,c->f ,c->ch);  
  67.     printf(“4.结构体嵌套形式输出:\n”);  
  68.     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);  
  69.     free(c);  
  70.     return 0 ;  
  71. }  
#include <stdio.h>




猜你喜欢

转载自blog.csdn.net/zhaozhiyuan111/article/details/79395667