当前位置: 首页 > news >正文

C语言(构造类型)

构造类型

数据类型

  1. 基本类型/基础类型
    整数型
    短整型:short / short int (2字节)
    整型(默认):int (4字节)
    长整型:long /long int (8字节(64位系统))
    长长整型:long long / long long int(16字节)
    浮点型
    单精度:float(4字节)
    双精度:double(8字节)
    长双精度:long double(16字节(64位系统))
    字符型:char(1字节)
  2. 指针类型
  3. 数据类型*:
    int ,char,float*等 (8字节)
  4. void*:任意数据类型的指针(万能指针)(8字节)
  5. 空类型
    void;没有返回值或没有形参(不能定义变量)
  6. 自定义类型/构造类型
    结构体类型:struct
    共用体/联合体类型:union
    枚举类型:enum
    注意:整数型和字符型分有符号signed和无符号unsigned,默认是有符号,有符号可以省略关键字
    signed

结构体

结构体的定义

定义:自定义数据类型的一种,关键字struct,结构体类型的变量可以存储多个不同数据类型的
数据。
定义格式:

 struct 结构体名
{
数据类型1 成名名称1;// 结构体中的变量叫做成员
数据类型2 成员名称2;...}

注意:结构体中定义的变量,我们称之为成员变量
格式说明:
结构体名:合法的标识符,建议单词的首字母大写(所谓的结构体名,就是自定义类型的类
型名称)
数据类型n:C语言支持的所有类型(包括函数,函数在这里用函数指针表示)
成员名称:合法的标识符,就是变量的命名标准
数据类型n 成员名称n:类似于定义变量,定义了结构体中的成员

标识符:
说明:变量名、数组名、函数名、常量名、结构体名、共用体名、枚举名等都是标识符
命名规则:

  1. 只能包含字母、数组、下划线
  2. 不能以数字开头

注意:
结构体在定义的时候,成员不能赋值
举例:

struct Cat{int age = 5; // 错误,结构体定义的时候,成员不能赋值
double height; // 正确
void (*run)(void);// 正确
}

常见的定义格式
方式1:常规定义(命名结构体,只定义类型)–推荐

 struct  Student{int num;// 学号
char name[20];// 姓名
char sex; // 姓名
int age; // 年龄
char address[100];// 家庭住址
}void (*info)(void);// 信息输出(函数指针)

方式2:定义匿名结构体(常用于作为其他结构体的成员使用)

struct Dog
{
char *name;// 姓名
int age; // 年龄
}
struct // 结构体中嵌套的结构体不能有名字,故被称作匿名结构体
{
int year;// 年
int month;// 月
int day;// 日
}

注意:定义匿名结构体的同时必须定义结构体变量,否则编译报错,结构体可以作为另一个
结构体的成员。
总结:
结构体可以定义在局部位置,也可以定义在全局位置(用的比较多)。
全局位置的结构体名和局部位置的结构体名可以相同,就近原则(和普通变量的定义同理)
结构体类型的使用:
利用结构体类型定义变量,定义数组;结构体类型的使用与基本数据类型的使用类似。

结构体变量的定义

三种形式定义结构体变量
结构体变量也称为结构体的实例。
第1种
① 先定义结构体(自定义数据类型)
② 然后使用

struct 结构体名 变量名(实例);

举例:

// 先定义结构体(自定义数据类型)
struct A
{
int a;
char b;
}
// 后定义结构体变量(使用自定义数据类型)
struct A x;
struct A y;

第2种
① 在定义结构体的同时,定义结构体变量

{
数据类型1 数据成员1;
...
} 变量列表;

举例:

struct A
{
int a;
char b;
} x,y;
struct A z;

此时定义了一个结构体A,x和y是这个结构体类型的变量。
第3种(不推荐)
在定义匿名结构体的同时,定义结构体变量

struct
{
int a;
char b;
} x,y;
struct
{
int a;
char b
} z;

此时定义了一个没有名字的结构体(匿名结构体);x,y是这个结构体类型的变量。
匿名结构体:— 弊大于利(尽量少用)
优点:少写一个结构体名称
缺点:只能使用一次,定义结构体类型的同时必须定义变量。
应用场景:
挡结构体的类型只需要使用一次,并且定义类型的同时定义变量。
作为其他结构体的成员使用。
定义结构体的同时,定义结构体变量初始化

struct Cat
{
int age;
char color[20];
} cat;

结构体成员部分初始化时,大括号{}不能省略
结构体成员,没有默认值,是不确定的数
案例:

/**
* 结构体变量的定义
*/
#include <stdio.h>
// 先定义结构体,再定义结构体变量
void fun1()
{
// 先定义结构体
struct A
{
int a;
char b;
};
// 再定义结构体变量
struct A x;
struct A y;
}
// 定义结构体的同时定义结构体变量
void fun2()
{
struct A
{
int a;
char b;
} x,y;
struct A z;
}
// 定义匿名结构体的同时定义结构体变量
void fun3()
{
struct
{
int a;// 结构体成员
char b;
} x,y;// 结构体变量
struct
{
int a;
char b;
} z;
}
int main()
{
fun1();
fun2();
fun3();
return 0;
}

结构体变量的使用

结构体变量访问结构体成员
格式:

结构体变量名.成员名

可以通过访问给成员赋值(存数据)
可以通过访问获取成员的值(取数据)
结构体变量未初始化,结构体的成员值随机(不确定)
结构体变量在定义时,可以初始化
建议用大括号标明数据的范围
结构体成员初始化,可以部分初始化,部分初始化时一定要带大括号标明数据的范围
案例:

#include <stdio.h>
/* 全局的结构体(数据类型) */
struct Dog // _dog _int
{
char* name;// 姓名
int age;// 年龄
char sex; // M:公,W:母
void (*eat)(void);// 吃饭
};
void eat()
{
printf("狗狗在吃狗粮\n");
}
/* 先定义,再初始化*/
void fun1()
{
// 定义结构体变量
struct Dog dog;
// 给结构体变量赋值,其实就是给其成员赋值
dog.name = "旺财";
dog.age = 5;
dog.eat = eat;
// 访问结构体变量,起始就是访问其成员
printf("%s,%d,%c\n",dog.name,dog.age,dog.sex);
// 访问函数
dog.eat();
}
/* 定义的同时初始化 */
void fun2()
{
// 定义结构体变量并初始化
struct Dog dog = {"招财",23,'M'};// 初始化时,保留大括号
// 修改成员的值
dog.name = "金宝";
// 访问结构体变量,起始就是访问其成员
printf("%s,%d,%c\n",dog.name,dog.age,dog.sex);
}
int main(int argc,char *argv[])
{

http://www.mrgr.cn/news/80386.html

相关文章:

  • OpenIPC开源FPV之Adaptive-Link地面站代码解析
  • 锂电池SOH预测 | 基于BiGRU双向门控循环单元的锂电池SOH预测,附锂电池最新文章汇集
  • PHP8.4下webman直接使用topthink/think-orm
  • wazuh-modules-sca-scan
  • 【Qt】Qt+Visual Studio 2022环境开发
  • Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
  • <数据集>输电线塔杂物识别数据集<目标检测>
  • uniapp滚动消息列表
  • OpenCV函数及其应用
  • dev类似于excel的数据编辑
  • Next.js流量教程:核心 Web Vitals的改善
  • ARM Cortex-A7 MPCore 架构
  • XML基础学习
  • 【时间序列分析】皮尔森相关系数理论基础及python代码实现
  • Spring Framework 路径遍历漏洞复现(CVE-2024-38819)
  • Redis篇-21--运维篇3-集群(分片,水平扩展,高可用,集群配置案例,扩展哨兵案例)
  • .Net WebAPI(一)
  • 【网络安全】Web Timing 和竞争条件攻击:揭开隐藏的攻击面
  • Vulhub:Redis[漏洞复现]
  • 交通道路上的车辆,人,自行车摩托车自动识别数据集,使用YOLO,COCO,VOC格式对2998张原始图片标注