1、结构体的概述

  在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一。

  在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。
  C语言便提供了结构体来解决我们的这种需求,它允许内部的元素是不同类型的。
  结构体是用来存放相同类型数据或者不同类型数据的自定义数据类型

2、结构体的定义

  struct 结构体名 { 
      成员变量1;
      成员变量2;
      ...
   };

 struct student {

     // 结构体的成员变量
char name[]; // 姓名
char gender; // 性别
int age; // 年龄
double score; // 成绩 };// 分号不能省略

3、结构体变量的定义

  第一种方式: 先定义结构体类型,再定义变量
    此定义方式与普通数据类型变量的定义方式相同;
      struct 结构体名 变量名;
     注意: 其中struct 结构名才为数据类型, 单纯的结构名不算作数据类型。
 struct teacher {
char name[];
int age;
float height;
}; // 分号不能省略
struct teacher englishTeacher;
  第二种方式: 定义结构体类型的同时定义变量 

 struct teacher {
char name[];
int age;
float height;
} mathTeacher;

    其中mathTeacher为变量名。

  第三种方式: 直接定义结构体类型变量,省略类型名
 struct {
char name[];
int age;
float height;
} chineseTeacher;

    其中chineseTeacher为变量名, 此结构体我们称为匿名结构体。
4、结构体的重定义 

  结构体的重定义方式分为两种:
    1) 对已有结构体进行重定义:
         typedef struct teacher Teacher; 

   2) 在创建结构体时, 进行重定义:

 typedef struct teacher {
char name[];
int age;
float height;
} Teacher;

5、结构体变量的成员

  1) 结构体变量成员的初始化:使用{...}给构造类型赋初始值

      Teacher englishTeacher = {“zf”, , 1.70f};

    注意:赋值的数值类型和成员变量的类型一一对应

  2) 赋值:
    1> 先找到结构体变量,再通过“ .” 操作符访问变量的成员,简单数据类型可以直接赋值

   englishTeacher.name = tt
  englishTeacher.age =
  englishTeacher.height = 1.77f

    2> 结构体与结构体可以直接赋值

      注意:数组是不可以直接赋值的

      小技巧: 可以通过把数组作为结构体的成员实现直接赋值。

6、结构体所占内存的计算

  1) 最大分配(长度最大的进行分配内存)

  2) 内存对齐(对应类型所占字节的倍数进行存放)

 struct student {
char name[];   //内存0-20
char gender;  //内存21
int age; //内存24-27
double score; //内存32-39
};

  图解:

  
7、结构体嵌套

 struct birthday {
int year;
int month;
int day;
};
typedef struct birthday Birthday; struct person {
char name[];
char gender;
Birthday bir;
};
typedef struct person Person;
  结构体嵌套时,应注意避免使用结构体本身, 如下写法是错误的:
   struct person {
  char name[];
  struct person per;
  };

8、结构体数组

  数组的类型是结构体类型,与其他数据类型的数组是一样的,可以参考iOSDay04C语言数组

iOS学习06C语言结构体的更多相关文章

  1. Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  2. GO语言学习(十六)Go 语言结构体

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

  3. c语言结构体

    [C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...

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

    今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...

  5. 漫谈C语言结构体

    相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...

  6. 漫谈C语言结构体【转】

    相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...

  7. 漫谈C语言结构体struct、公用体union空间占用

    先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...

  8. 解析C语言结构体对齐(内存对齐问题)

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  9. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

随机推荐

  1. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(六) 之 Layim源码改造右键菜单--好友、组管理功能的实现。

    前言 上一篇中讲解了加好友的流程,本篇将介绍好友管理,群组管理的右键菜单功能.当然由于菜单项目太多,都实现也得花费时间.只讲解一下我是如何从不知道怎么实现右键菜单到会自定义菜单的一个过程.另外呢,针对 ...

  2. c语言字符集

    一.字符常量 'A', 'B','\n','\'','1' 二.字符类型变量的赋值 char c1='A'; char c2='b'; char c3=65; c2='\''; c2='\n'; 三. ...

  3. Android Service 与 IntentService

    Service 中的耗时操作必须 在 Thread中进行: IntentService 则直接在 onHandleIntent()方法中进行

  4. Xcode开发中的6个小技巧

    Xcode是iPhone和iPad开发者用来编码或者开发iOS app的IDE.Xcode有很多小巧但很有用的功能,很多时候我们可能没有注意到它们,也或者我们没有在合适的水平使用这些功能简化我们的iO ...

  5. elipse插件整理

    整理一下用过的eclipse插件: 1. WindowBuilder :swing插件,可以拖啊拖啊拖出来一个窗口,可以显著提高开发效率.   官网: http://www.eclipse.org/w ...

  6. js冒泡排序与二分法查找

    冒泡排序 var attr=[1,5,7,6,3,9,2,8,4]; var zj=0; //控制比较轮数 for(var i=0;i<attr.length-1;i++) { //控制每轮的比 ...

  7. Ubuntu下安装Python3.4

    转自:http://blog.sina.com.cn/s/blog_7cdaf8b60102vf2b.html 1. 通过命令行安装Python3.4,执行命令:sudo apt-get instal ...

  8. PHP保留小数位的三种方法

    /** * PHP保留两位小数的几种方法 * @link http://www.phpddt.com */ $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo ...

  9. JSON资料汇总

    网络入门学习资料 1.W3School的JSON教程:http://www.w3school.com.cn/json/index.asp 2.Introducing JSON[介绍JSON]:http ...

  10. hibernate 关联映射

    关联关系大致分为两大类: 1.单向关系:只需单向访问关联端.例如:只能通过老师访问学生,或者只能通过学生访问老师. 2.双向关系:关联的两端可以互相访问.例如:老师和学生之间可以互相访问. 单向关联可 ...