C语言笔记(避免头文件重复包含、memcpy函数、枚举、共用体)

前言

        记录嵌入式学习的过程,C高级篇,避免头文件重复包含、mencpy与strcpy区别、结构体与共用体区别

避免头文件重复包含(重点)

//假设头文件名为demo.h
#ifndef _DEMO_H
#define _DEMO_H

//中间写要编写的代码

#endif

memcpy与strcpy函数

        都需要引入头文件         #include <string.h>
        都是用于复制数据的函数,但是在功能、用途和参数上存在一定的差异。对比如下:

  • 参数类型
     
  • 处理内容
    strcpy专门用于复制字符串,包括字符串的结束符\0。
    mencpy用于复制内存中的任意内容,不限于字符串,根据指定的字节数n来复制数据,不会复制\0作为结束符
  • 安全性
    strcpy在目标缓冲区大小不足够容纳源字符串时,可能会导致缓冲区溢出,进而引起安全问题。
    mencpy通过指定复制的字节数来避免缓冲区溢出,相对的安全,但也需要自己去确保指定的字节数不会超过目标缓冲区的大小。
  • 用途
    复制字符串时,使用strcpy。
    需要复制非字符串类型的数据(如整型数组、结构体等)。应使用mencpy。

枚举

        枚举enum,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
        枚举类型就是特殊的整数。

#include <stdio.h>
//定义枚举类型
enum color
{
    red,
    yellow,
    blue,
    green
};
int main()
{
    //声明枚举变量
    enum color myColor;
    //为枚举变量赋值
    myColor = blue;
    //省略下面配合 Switch语句的使用
    return 0;
}

注意点

  • 使用时一般不会用来定义变量;
  • 是特殊的整数 ,可以应用switch-case语句中做判断;
  • 枚举类型第一个成员如果没有显示赋值,默认值为0,后面的所有成员只要没有显示赋值就是上一个成员的值+1。

共用体(联合体)

        多个成员变量公用一块内存,起始地址是一样的,同一时刻只能保证一个数据有效,相互会影响。

union data
{
    int a;
    char b;
    float c;
};

结构体和共用体的区别 

  • 结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
  • 结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。

typedef关键字

        对原有的数据类型重新定义别名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值