在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名、年龄、性别、身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来进行存储。当然,对于面向对象的语言来说,最好是用类来表示,但是C语言是面向过程的,因此选择用结构体来表示。

一.结构体的定义
struct 结构体名{类型名 成员名1;类型名 成员名2;... ...类型名 成员名n;};

二.结构体的变量声明

1.先定义结构体类型,再定义变量

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义学生信息的结构体*/
struct student{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高
};int main(int argc, const char * argv[]) {//声明结构变量
struct student student1;
struct student student2;return 0;
}

三.定义结构体类型的同时定义变量

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义学生信息的结构体,并声明两个学生结构变量student1和student12*/
struct student{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高
} student1, student2;int main(int argc, const char * argv[]) {return 0;
}

四. 直接定义结构体类型变量,省略类型名

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  直接声明两个结构体变量student1和student2*/
struct{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高
} student1, student2;int main(int argc, const char * argv[]) {return 0;
} 

五.结构体的嵌套

1结构体中可以包含,但是不允许对结构体本身递归使用。

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义日期结构体*/
struct date{unsigned int year;unsigned int month;unsigned int day;
};/***  定义学生结构体*/
struct student{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高struct date birthday; //出生日期 (date结构体)
};int main(int argc, const char * argv[]) {return 0;

六.结构体的初始化

<一> 结构体变量可以在声明的时候一次性给多个成员初始化,但是需要注意的是初始化的顺序必须和定义结构体成员的顺序一样,初始化成员的个数是可以少于总成员个数。

<二> 声明结构变量后,可以采用结构变量名.成员名来为其赋值或取值。

<三> 声明结构变量后,可以整体接收相同类型的其他结构变量的值。

代码

/
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义日期结构体*/
struct date{unsigned int year;unsigned int month;unsigned int day;
};/***  定义学生结构体*/
struct student{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高struct date birthday; //出生日期
};int main(int argc, const char * argv[]) {//<一> 一次性给多个成员赋值struct date birth1 = {1992, 1, 1};struct student student1 ={"jredu", 21, 'f', 180.0, birth1};//<二>对单个成员赋值student1.age = 20;
student1.height = 178.0;//<三>相同类型的变量间可进行整体赋值
struct student student2 = student1;return 0;
}

七.结构体的使用

  结构体是我们自定义的一种数据类型,但是实际上和系统提供给我们的基本数据类型的使用是一样的,因此,除了可以用结构做变量,还可以用结构体做数组、指针、函数。

1结构数组

  用数组来存储一组结构体类型的变量,比如存放一组学生的结构数组。

  在使用结构数组的时候和上面讲的结构变量一样,同样可以通过三种方式来得到结构数组。

代码

/***  <一>先定义结构体*/
struct student{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高
} ;int main(int argc, const char * argv[]) {//再声明结构数组struct student stus[10];return 0;
}

代码

/***  <二>定义结构体同时直接声明结构数组*/
struct student{char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高
} stus[10];

代码

/***  <三>直接声明结构数组*/
struct {char name[100]; //姓名unsigned int age; //年龄char sex; //性别double height; //身高
} stus[10];

2指向结构体的指针

要想使用指针来间接改变数据,必须用相同类型的指针去指向对象。结构体类型的变量或者数组在使用的时候就需要使用结构体类型的指针。

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义结构体*/
struct student{char *name; //姓名unsigned int age; //年龄
} ;int main(int argc, const char * argv[]) {//声明结构变量struct student student1 = {"jredu", 21};//定义一个结构指针struct student *ptr = &student1;//访问结构成员,比如得到学生信息//方式1:直接使用结构变量printf("name = %s,age = %u\n",student1.name, student1.age);//方式2:通过指针得到结构变量printf("name = %s,age = %u\n", (*ptr).name, (*ptr).age);//方式3:直接用指针printf("name = %s,age = %u\n",ptr->name, ptr->age);return 0;
}

3结构体做函数的参数

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义结构体*/
struct student{char *name; //姓名unsigned int age; //年龄
} ;void func1(struct student tempStu);
void func2(struct student *ptrStu);int main(int argc, const char * argv[]) {//声明结构变量struct student student1 = {"jredu", 21};struct student student2 = student1;//调用参数为结构变量的函数
    func1(student1);printf("student1 name = %s\n",student1.name);//调用参数为结构变量的函数func2(&student2);printf("student2 name = %s\n",student2.name);return 0;
}void func1(struct student tempStu){tempStu.name = "apple";
}void func2(struct student *ptrStu){ptrStu->name = "apple";
}

八、结构体的简化

typedef可以对数据类型进行重命名,因此在定义结构体的时候可以使用它来简化操作。

代码

//
//  main.c
//  结构体
//
//  Created by jerei on 15-12-27.
//  Copyright (c) 2015年 jerehedu. All rights reserved.
//

#include <stdio.h>/***  定义结构体*/
typedef struct {char *name; //姓名unsigned int age; //年龄
} Student;int main(int argc, const char * argv[]) {//声明结构变量Student student1 = {"jredu", 21};return 0;
}

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

ios开发中的C语言学习—— 结构体简介相关推荐

  1. C语言学习—结构体的定义与使用

    文章目录 前言 一.结构体的概念 1.结构体是什么? 2.如何定义一个结构体? 3.结构体变量 4.结构体变量的初始化 4.1结构体成员的访问 4.2结构体变量的初始化 二.结构体的使用 1.如何去使 ...

  2. 2020.1.13 C语言学习 结构体+结构体数组+结构体指针

    结构体 结构体的形式 struct 结构体名称 { 结构体成员1; 结构体成员2; - }; 例如: 图书的结构体 struct Book {char title[128];char author[4 ...

  3. c语言的结构体与指针的区别,C语言 结构体与结构体指针用法总结

    在C语言开发中,结构体用到的机会很多.所谓结构体,就是定义一种里面包含多种元素的变量. 我们来看一个简单的例子.比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息.结构体变量定义如下: s ...

  4. iOS开发中的Web应用概述

    为了更好的阅读体验,建议阅读原文 插播广告 -- 几十行代码完成资讯类App多种形式内容页 HybridPageKit :一个针对资讯类App高性能.易扩展.组件化的通用内容页实现框架. 想和我一起全 ...

  5. IOS开发入门之一——Swift语言基础

    需要iOS视频资料可以加我微信: 1914532832  验证信息请注明:IOS开发 很多新人对IOS开发很迷茫,不知道从何下手?看完本系列,你将会觉得IOS入门其实很简单.要学习IOS开发,当然是先 ...

  6. c语言的程序怎么安装在ios,iOS开发基础之C语言

    为何学习iOS开发要先学C语言呢,学习c语言对ios开发有何作用. 现在越来越多的iOS开发兴趣爱好者投入到了iOS培训中,有的是已经在职的员工,有的是还在就读的学生,还有一些是完全零基础的同学,那么 ...

  7. iOS开发-由浅至深学习block

    作者:Sindri的小巢(简书) 关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们 ...

  8. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  9. iOS开发中的神兵利器 [实战系列]-李发展-专题视频课程

    iOS开发中的神兵利器 [实战系列]-11758人已学习 课程介绍         - 140节课程讲解GitHub中近百个过千star的iOS热门开源项目 - 市面上唯一大规模讲解热门的iOS开源项 ...

最新文章

  1. 2、Reactive Extensions for .NET(译)
  2. 428 Setup MySQL + - 改
  3. 深度学习核心技术精讲100篇(五十四)-阿里文娱多模态视频分类算法中的特征改进
  4. 为啥用mencoder执行格式转换不退出_kindle|什么?calibre还能这么用?
  5. [置顶] 杂七杂八
  6. [转]Terraform 使用 - 从最简单例子开始
  7. 使用 .NET 平台,如何玩转 Universal Windows 应用? 1
  8. abd串口工具使用教程_如何使用命令刷机 ADB与FASTBOOT工具使用教程
  9. 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore.nativeNewInstance(java.lang.S
  10. 易封装app网站打包工具软件v2.0版本
  11. 流程图软件用哪款: Draw.io, 亿图图示, ProcessOn. 做最适合你的流程图
  12. CAD2018下载AutoCAD2018下载AutoCAD2018安装详细教程
  13. 英特尔的新硬件套装使制作机器人和无人机更加简单
  14. 法拉克机器人自动怎么调_FANUC机器人:参考位置功能介绍与设定方法
  15. 实测办公场景下,国产远程控制软件的表现力如何?(技术解析)
  16. 青春野狼不做姐控偶像的梦 - 线段树 - 扫描线 - 单调栈
  17. java变量的定义有哪些规则_Java变量详解
  18. 生日悖论分析python_Python关于生日悖论分析
  19. 成都计算机系统维护专业中专,成都计算机应用专业中专招生简章
  20. Linux安全之三大攻击(SYN,DDOS,CC)原理及处理的详解

热门文章

  1. 【百家稷学】图像识别,模型设计,人脸图像,摄影图像直播回放与资料下载(有三的书直播分享)...
  2. 2022版全球及中国消防设备市场营销策略分析与竞争趋势展望报告
  3. 中国发电机行业应用前景与投资策略分析报告2022版
  4. 中国工业节能减排产业项目盈利模式及投资风险预警报告2021-2027年
  5. 供销合作社对话中国农民丰收节交易会 谋定为农服务主业
  6. Vue-Router API参考
  7. 出现了错误。详细消息: 3 uncommitted changes would be overwritten by merge
  8. hdoj-1715-大菲波数(大斐波那契数列)
  9. java的本地文件操作
  10. centos安装zendopcache