C语言学习入门 (八) 结构体和枚举

结构体

它允许内部的元素是不同类型的

结构体的定义

//结构体类型:

struct Person

{

char name[20]; //char *name;

int age;

float weight;

};

//定义一个结构体变量,定义变量时才分配存储空间

structPerson person;    //与类型定义一起使用

struct Student {  //结构体类型与变量同时定义

char *name;

int age;

} stu;

struct {
 //省略类型,结构体变量名为stu

char *name;

int age;

} stu;

结构体的注意点

1.不允许对结构体本身递归定义

如下做法是错误的,注意第3行

1 struct Student {

2     int age;

3     struct Student stu;

4 };

2.结构体内可以包含别的结构体

3.结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列

结构体的初始化

1.

struct Person

{

char name[20];

int age;

float weight;

};

structPerson person = {"a",28, 55.5f};

2.

struct Person

{

char name[20];

int age;

float weight;

} person = {"a",28, 55.5f};

只能在定义变量时 初始化

结构体的使用

person.age =22;//
这里的.运算符  优先级最高

structPerson p1 = {"a",28, 55.5f};

structPerson p2 = p1;

结构体数组

跟结构体变量一样,结构体数组也有3种定义方式   ……person[5];

初始化与数组类似   struct Person person = { {}, {}, {} };

结构体作为函数参数

将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,

也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。//值传递

指向结构体的指针

* 结构体指针变量的定义形式:struct结构体名称 *指针变量名

* 有了指向结构体的指针,那么就有3种访问结构体成员的方式

  • 结构体变量名.成员名
  • (*指针变量名).成员名//因为 .优先级高,,所以要括起来
  • 指针变量名->成员名

void processStruct()

{

printf("p-name:%s\n",person.name);

struct Person *per = &person;

printf("p-age:%d\n", (*per).age);

printf("p-weight:%.2f\n", per->weight);

}

枚举

它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型

枚举类型的定义

enum Season {spring, summer, autumn, winter};

枚举变量的定义

跟结构体一样,有3种方式定义枚举变量

>enum Season {spring, summer, autumn, winter};

enum Season s;

>enum Season {spring, summer, autumn, winter} s;

>enum {spring, summer, autumn, winter} s;

枚举使用的注意

> C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。

> 枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。

enum Season {spring, summer, autumn, winter};

也就是说spring的值为0,summer的值为1,autumn的值为2,winter的值为3

>也可以在定义枚举类型时改变枚举元素的值

enum season {spring, summer=3, autumn, winter};

没有指定值的枚举元素,其值为前一元素加1。也就说spring的值为0,summer的值为3,autumn的值为4,winter的值为5

enum Season

{

spring, summer =18, fall, winter

} season;

void processSeason()

{   season =spring;//等价于
season = 0;  //默认从0开始

season = 9;

season = winter;//等价于 season = 20;

printf("season= %d\n",season);

int *p = &season;

printf("p=%d\n", *p);

}

时间: 2024-10-15 08:08:52

C语言学习入门 (八) 结构体和枚举的相关文章

黑马程序员学习笔记--------C语言变量类型,结构体,枚举

本章学习的知识是定义结构体,枚举等自定义的数据类型,已经宏命令,变量类型等细小的知识点,在开始本章的新知识学习之前首先我们要明白的是C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储.变量也是有分类型的,不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型.生命周期). 一.变量类型 变量分为全局变量和局部变量. 首先说明一下局部变量的特点 1> 定义:在函数内部定义的变量,称为局部变量.形

梓益C语言学习笔记之结构体-共用体-枚举

有人说,我们需要将不同类型的数据组合成一个整体,于是,就有了结构体 一.结构体的概念: 一种或多种基本类型或构造类型的数据的集合. 二.定义方法: 先定义结构体类型,再去定义结构体变量 struct  结构体类型名{ 成员列表 }; 如: struct stu{ int num; char name[20]; char sex; }; struct stu  lucy,bob,lilei;//定义了三个struct stu类型的变量 每个变量都有三个成员,分别是num name  sex 通常咱

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

一.结构体的定义与使用 1.结构体内部的每个变量称为字段或成员变量 2.定义方法:struct <结构体标记> {-}; 或 typedef struct {-} <结构体类型名>; 变量定义:struct <结构体标记> 变量1,2- 或 <结构体类型名> 变量1,2- 3.成员变量的访问: x.成员变量名           (*px).成员变量名           px->成员变量名 "->"称为指向运算符或箭头运算符

C语言学习入门 (八) typedef 关键字

关键字:typedef 用法:为各种数据类型定义一个新名字(别名) typedef与基本数据类型 typedef int Integer;Integer a= 8: 也可以在别名的基础上再起一个别名 typedef IntegerMyInteger;MyInteger aa = 8; 原来的数据类型也可以正常使用 typedef与指针 typedef char *String;String str = "stone"; typedef与结构体 typedefstructPerson P

Swift入门篇-结构体

前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中是灰常重要的一部分,如果您很好的掌握结构体,在后面ios开发中,会理解的更加清楚. 一:结构体声明 格式: struct 结构体名 { } 说明: 1: struct 是定义结构体的关键字 例子 /* 1:struct 是结构体的关键字 2:student 结构体名称 3:student() 创建一

C#学习记录4——结构体,接口

1.结构体 对于C++语言来说,其实结构体和类几乎没有什么太大的区别.类能够实现的功能,使用结构体大部分也可以. 不过,在C#里面,我们把结构体看作是一种轻量的类的替代品.它和类一样有构造方法,属性,成员属性/数据,甚至是操作符.注意struct构造方法必须有传入参数. 当然struct也不是完全支持类的所有功能的. 首先,结构体无法进行继承.也就是说,结构体不想类那样灵活,代码也无法复用. 其次,也是非常重要的一点:结构体是一种值类型,而类是引用类型.这两种类型的区别,可以查看C#学习记录3上

黑马程序员— C语言基础之结构体、枚举、预处理、typedef的使用

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本章我们主要来学习之前所学的复杂数据类型中的同样也很重要的结构体和枚举的知识,以及C语言中的预处理,typedef的使用,简单介绍一下static和extern等一些比较杂的知识.在开始本章的新知识学习之前首先我们来学习一下根据变量的作用域的不同C语言一般把变量分为两种,局部变量和全局变量.下面我们来分别比较和体会一下这两种不同的变量类型: 根据变量的作用域,可以分为: 1. 局部变量: a.

【好程序员笔记分享】——C语言之结构体与枚举

iOS培训——我的c语言笔记,期待与您交流! 一:结构体与枚举的介绍: 结构体与枚举:是一种存储复杂的数据结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合. 二:结构体的创建 struct user { char username[20]; int score; } 这里两种不同类型的属性的结构体. 创建结构体,就是创建一个类型,计算机并没有分配内存空间. 三:结构体的调用 struct user u1; 这里就是对结构体的调用,这个时候计算机才会为其分配内存空间. u

C语言博客作业--结构体

一.PTA实验作业 题目1:按等级统计学生成绩 1. 本题PTA提交列表 2. 设计思路 for i=0 to i=n 如果分数大于等于85,就让grade为A 如果分数大于等于75,就让grade为B 如果分数大于等于60,就让grade为C 如果分数小于60,就让grade为D,count++ count用于统计不合格人数 end i 返回count 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明 本题没错 题目2:6-4 结构体数组按总分排序 1. 本题PTA提交列表 2.