黑马程序员——C语言笔记之结构体以及枚举

黑马程序员——C语言基础教程笔记 黑马程序员——C语言基础教程笔记 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录黑马程序员——C语言基础教程笔记前言Day-11.C语言概论1.1 什么是C语言1.1.1 C语言特点1.1.2 学习C语言的理由1.1.3 发展方向1.1.4 C语言中的关键字2.3.Day-21.引入库2.读入数据总结 前言 研三了,作为一枚菜鸡硕,为了找工作,只好重刷C语言。以下笔记是我在“黑马程序员:http://yun. 阅读详情

------- android培训、java培训、iOS培训、.Net培训、期待与您交流! ----------

虽然结构体的用法很简单,但是OC里面用的频率很高,所以也是一个跟指针一样重要的知识点。

C语言构造类型:

       由一个或者多个已定义类型的元素用构造的方法,构造新的类型

构造类型有三种:

       数组类型   结构体类型   共用体(联合)类型

其中,结构体:

       是由一个或者多个相同或者不同的数据类型组成的构造类型

一、结构体

1、定义:

       struct 结构体名{


           成员列表;

 

       }; //注意此处的分号不能省

//定义一个iPhone的结构体
      struct iPhone{
 
          char *color;
          float  screenSize;
          int  sn;
          int  imei;
 
      };

2、结构体变量及定义方法

1)先定义结构,再说明结构变量

struct stu{
     int num;
     char name[20]; 
     char sex;
     float score; 
};
struct stu boy1,boy2;
2)在定义结构类型的同时说明结构变量

struct stu{
     int num;
     char name[20];
     char sex;
     float score;
}boy1,boy2;

3)匿名结构体定义结构变量

struct{
     int num;
     char name[20];
     char sex;
     float score; 
}boy1,boy2;
注意:定义结构体完成后,并不会给结构体分配存储空间,定义结构体变量后才分配空间。

结构体变量中成员的访问方法:

   结构体变量名.成员名

如果成员也是一个结构体,则:

  结构体变量名.成员名.成员名...

3、结构体变量的初始化

1)先定义结构体变量,然后再初始化

struct stu boy1,boy2; 
boy1.num = 1010; 
strcpy(boy1.name, "bbbbb");
//boy1.name="cjk"; //这是错误的,相当于char name[20], name="abc"; 如果写成char *name, 则name="abc"可以;
boy1.sex = 'f';
boy1.score = 18.0f;

2)定义的同时初始化

(1)全部初始化

//方法1:
struct stu{
     int num;
     char name[20];
     char sex;
     float score;
} av1={1012,"zhangsan",'f',30};
//注意 "xzmly"初始化赋值给了name[20];
//方法2:
struct stu boy1={1011,"lisi",'f',23};
//注意:初始化的顺序必须与结构体定义的时候成员的顺序一致
 

<pre name="code" class="plain">//使用另外一已经存在的结构体初始化新的结构体//两个相同类型的结构体变量的赋值,相当普通变量的赋值,是整体拷贝,而不是地址赋值,例:
struct Student stu1 = {"wangwu",12,'f'};
struct Student stu2;stu2 = stu1; // 这相当于把stu1里面所有的成员元素赋值给了stu2

(2)部分初始化

structstuboy1={.name="highge"}; //只给name单独赋值{}不能少

4、结构体变量存储原理

结构体占用的内存空间是每个成员占用的字节数之和(考虑对齐问题)

计算方法:

1)先找对齐模数

2)再计算结构体变量中各个成员占用的字节和

struct A{
short a;  // 2字节 + 2 下面是4,2不是4的倍数,所以加上2
int b;    // 4字节     上面加起来是8个字节,下面是1,8是1的倍数,所以不加 
char c;   // 1字节 + 7 上面下面是8,上面加起来是9,9不是8的倍数,所以加上7
double d; // 8字节     直接相加是24,24正好是这里面所有数字的倍数,所以就是24
};
struct B{
double d; // 8字节     下面是2,8是2的倍数,所以不加
short a;  // 2字节 + 2 上面加起来是10,下面是4,10不是4的倍数,所以加上2
int b;    // 4字节     上面加起来是12,下面是1,12是1的倍数,所以不加
char c;   // 1字节 + 7 所有的加起来是17,17并不是2 8 4 的倍数,所以要成为所有的倍数需要加上7最后得24
};

二、结构体数组

结构数组的每一个元素都是具有相同结构类型的下标结构变量

1、结构数组的定义:

    struct 结构名{

           成员表列;

}数组名[数组长度];

struct stu{
       int num;
       char *name;
       char sex;
       float score; 
}boy[5];
2、结构数组的初始化

1)定义的同时进行初始化

struct stu s[2]={{12,"sb"},{18,"fengjie"}};

2)先定义,后初始化,整体赋值

s[1]=(struct stu){23,"xiaoluo"}; // (struct stu)不能少

3)先定义,后初始化

s[1].age=12; strcpy(stu[1].name, "xxoo"); 

三、结构体指针

结构体指针变量中的值是所指向的结构体的首地址

1、定义

struct 结构名 *结构指针变量名

2、结构体指针间接访问成员值

         (*结构指针变量).成员名

或为:

         结构指针变量->成员名

四、结构体嵌套

成员又是另一个结构体变量,即构成了嵌套的结构

Struct Date{
    int month;
    int day;
    int year; 
}
struct stu{
    int num;
    char *name;
    char sex;
    struct Date birthday; Float score;// 包含了Date结构体的结构变量
}
注意:结构体不可以嵌套自己的变量,但可以嵌套自己类型的指针

//定义一个全局结构体,作用域到文件末尾 
struct Person{
      int age;
      char *name;
      struct Person *son;
};
struct Person son = {4,"kim"}; 
struct Person p = {30,"lzy",&son};
printf("name = %s,son name = %s\n",p.name,p.son->name);
五、结构体指针作为函数的参数

void changeTime(struct Time *time); 
struct Time t;
changeTime(&t);


六、枚举类型

枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解成为任何基本类型

1、定义

enum 枚举类型名{枚举值表};

2、枚举变量的定义和使用

1)先定义类型,后定义变量

enum weekday{sun,mou,tue,wed,thu,fri,sat};
enum weekday a,b,c;
2)同时定义变量和类型

enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c; 
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;//匿名定义

关于枚举类型的代码段

#include <stdio.h>
//默认值              0            1            2
//手动赋值            5            6            7
enum iColor{kIcolorWhite=5,kIcolorBlack,kIcolorTHJ};

int main(int argc, const char * argv[]) {
    
    //1、枚举类型变量的定义
    enum iColor  iPhoneColor;  //iPhoneColor的取值是有要求的
    //取值应为kIcolorWhite,kIcolorBlack,kIcolorTHJ中的其中一个
    
    enum Sex{kSexMan,kSexWomen,kSexYao} isex;
    
    //2、枚举类型变量的初始化
    
    //给枚举变量赋值
    iPhoneColor = kIcolorTHJ;
    isex = kSexYao;
    
    //3、枚举变量如何使用
    printf("%d\n",iPhoneColor);
    
    //4、枚举变量的值
    //枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整形的初值
    // 默认初值:从第一个元素开始值为0,以后个元素的值,是上一个元素的值+1,
    
    //5、应用
    struct Person{
    
        char *name;
        //char sex; //'z'
        enum Sex isex; //kSexMan,kSexWomen,kSexYao
    };
    
    //6、不按套路的出牌
    iPhoneColor = 3.4;  //尽量不要这么干
    printf("%d\n",iPhoneColor);

    return 0;
}

黑马程序员 -- C语言 结构体 预编译 ------- android培训、.Net培训、IOS培训、碧空海的技术博客,期待与您交流!---------- 第六讲  结构体  预编译  A.结构体 1.数组:只能有多个相同类型的数据构成。结构体:可以有多个不同类型的数据构成。 2.建立结构的声明; a.定义结构体类型。 Struct person { int age; double height; char *na 阅读详情

相关推荐

RemoteSensing期刊word模板

该期刊所属遥感领域,为2区。这里,我们提供了其word版本的格式模板。

Bugku 哥哥的秘密

给了个QQ号,说是空间里藏了东西,进入空间,有两个提示: hint1:解题流程为:收集空间信息--相册--收集微博信息--相册--解题--相册--提交flag hint2:解题部分题目需要下载原图才能看到哦 说明第一步要在空间中找信息,往下看发现了一个类似盲文的东西: 猜测可能是盲文加密,在线网站解密:文本加密为盲文,可自设密码|文本在线加密解密工具 (qqxiuzi.cn) ⠀⡘⠀⡙⠀⡞⠀⡄⣿⠪⡛⣶⡸⠱⠀⠍⡥⣆⡗⠀⡎⢊== 得到下一步提示:hint:密码=时地人,意思是密码是“时间地点...

qq_52907838的博客 1万+

二维“能量源”(电场、磁场、功率)入射边界设置方法

comsol光学仿真设计相关学习笔记和经验 1. 二维“能量源”(电场、磁场、功率)入射边界设置方法 2.边界条件设置薄膜材料

VJCP_90909Bu0的博客 5193

C语言------结构体、枚举类型

一、结构体    结构体的定义:          在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)

huhanze的专栏 949

QFN封装芯片手工焊接实战:从焊盘处理到拖焊技巧

本文详细介绍了QFN封装芯片手工焊接的全过程,从焊盘处理到拖焊技巧,再到常见问题的现场修复方法。通过实战经验分享,帮助工程师和DIY爱好者掌握0.5mm小间距QFN芯片的焊接技术,提升焊接成功率和质量。重点讲解了垂直与平行拖焊手法的对比应用,以及焊后清理与质量检验的关键步骤。

weixin_42652674的博客 532

Scipy优化踩坑实录:trust-constr和SLSQP约束定义到底差在哪?

本文深入解析了Scipy优化模块中trust-constr和SLSQP两种方法在约束定义上的差异。通过对比面向对象的trust-constr和字典式定义的SLSQP,揭示了它们各自的优势与适用场景,帮助开发者在有约束优化问题中选择合适的算法,提升计算效率与准确性。

weixin_42573113的博客 271

条件编译-结构体的使用

[code="c"] main() { struct stu { int num; char *name; char sex; float score; } boy1,boy2; boy1.num=102; boy1.name="microjava"; printf("input sex and score:");...

congine_mcfeng的专栏 503

服务器报错:“Unhealthy status reported by this UEFI driver without specific error message”.. 记录解决过程

服务器开机报错:Unhealthy status reported by this UEFI driver without specific...

ayychiguoguo的博客 4399

C语言入门之自定义结构体数据struct Student { int num; char name[20]; char sex; int age; 类型

用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体 例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,因此组成一个组合数据,如student_1的变量,反映它们之间的内在联系 struct Student { int num; char name[20]; char sex; int age; f...

mygod2008ok的专栏 5万+

Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T

定义窗口注意力机制,与普通的注意力机制不同,其是在各个窗口中执行注意力机制。从中可以看到,其创新点主要是将图片进行拆分作为序列数据带入。差不多,主要实现的是一个下采样的算法过程;相同位置的像素绑定到一起构成一张新的。模型定义完毕后,初始化模型并开始训练。由于层之间重复性出现,可以定义一个。中,这里先实现拆分图片类。进行操作时我们定义三个类。定义一个多头注意力机制类。的数据,导入数据如下。导入数据,这里同样用。

bigcrab的博客 1634

MATPOWER下载安装教程

将MATPOWER文件复制在C:\Program Files (x86)\MATLAB\R2016b\bin目录下。原来的窗口中多了很多文件路径,点击【保存】,再点击【关闭】选择所要添加的MATPOWER文件夹,点击【选择文件夹】二、将MATPOWER放在bin目录下。找到菜单栏的【设置路径】点击【添加并包含子文件】一、从官网下载后解压。

weixin_47365903的博客 2万+

黑马程序员_C语言学习笔记之结构体和枚举

1.为什么使用结构体

MR____Wang的专栏 662

uniapp+uniCloud实现微信小程序一键登录

(用户唯一标识),用户登录成功后,开发者服务器可以将openid和session_key保存,生成一个自定义登录态的token令牌响应给微信小程序,通过token可以查询openid和session_key,小程序下次请求只要携带着token就可以证明已经登录。这个API就是获取用户信息,每次请求都会弹出授权窗口(这个可能会不弹,这个要看你的版本,根据版本来定,不懂的可以留下评论),用户同意后会返回。到这里就可以实现微信一键登录了,快去试试吧,有问题可以在评论区留言,我看见会尽我知道的为你解答。

lb2917的博客 2577

黑马程序员——ios学习笔记 C语言 结构体&链表&枚举

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 结构体 结构体是一种构造数据类型。 与其他高级语言中的“记录”类似。 定义:由相互关联的不同数据类型的数据组成的有机整体。 用途:为处理复杂的数据结构提供了手段。                 为函数间传递不同类型的参数提供了便利。 关键字:struct  stru

tt3tt3tt的博客 467

全能扫描王的实现(python版本)- 目标检测图像矫正

全能扫描王python代码实现,可用于文件扫描或者是图像校正

搬砖猛女的啃书历程 5490

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

黑马程序员 C语言 - 08 变量、结构体、枚举

若排版有错误,请查看PDF:C语言 - 08 变量、结构体、枚举.pdf

泠风小和 416

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

黑马程序员——4、C语言(结构体、枚举)

一、jie'g

tan_qi的专栏 584

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

黑马程序员————C语言——结构体、枚举、typedef

----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

tl18353359689的专栏 446

黑马程序员——C语言------结构体、枚举

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 结构体   一、概述 当一个整体由多种数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以

casono1的专栏 615

黑马程序员——c语言基础:结构体和枚举---typedef的使用

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、什么是结构体 当一个整体由多个数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数 据都具有不同的类型,姓...

aichi1692的博客 297

黑马程序员 C语言-枚举,结构体,指针

一、 指针※指针定义: 1. 定义格式 类名标识符  *指针变量名; int *p; 2. 先定义后赋值 int a = 10; int *p; p = &a; printf(“%d”, *p); 3. 定义的同时赋值 int a = 10; int *p = &a;※指针的组合: 用指针遍历一维数组元素   先遍历char数组(‘i’,’t’),再遍历int类型数组    

YakultBenZuo的专栏 786

黑马程序员——C语言---结构体、枚举、预处理指令

1.结构体 (1)什么是结构体,结构体的用途  当一个整体由多个数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的。  iOS用到的结构体: 描述一个点的位置, 描述矩形的大小, 描述一个矩形区域 点(x,y)

perhaps1004的专栏 490

黑马程序员-c语言结构体,联合以及枚举

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

tutou911的专栏 403

黑马程序员—C语言—数组、字符串、结构体和枚举

————————Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——————— 一、数组 1.数组的定义格式: 类型      数组名[元素个数]; 例如: int ages[5] = {19, 19, 28, 27, 26};还有其他写法: int ages[5] = {19, 19};int ages[5] = {[3] = 27, [4] = 26

编程之路 434

黑马程序员——C语言——结构体与枚举

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——— 一、结构体 1、结构体的定义 结构体与数组的区别数组:只能由多个相同类型的数据构成结构体:可以由多个不同类型的数据构成定义结构体的3种方式 1> 先定义类型,再定义变量 // struct是关键字,是结构体类型的标志。 struct Person{ int

qq_24074659的专栏 471

黑马程序员——c语言基础之结构体

------- android培训、java培训、期待与您交流! ---------- C语言构造类型 构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”和“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。   定义结构体的方法 一般形式: struct 结构名{ 成员表列 }; 注意:最后的“;”

zhang2292的博客 552
上一篇: 黑马程序员——C语言笔记之指针
下一篇: 黑马程序员——OC与C语言的差异学习
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值