嵌入式1:C语言学习二

目录

1、名词解析

2、位数运算

3、结构体

4、指针 

5、预处理器 

6、别名 typedef

7、枚举 enum

8、多文件(自定义工具类) 


1、名词解析

变量:可变更数据 //int a =1;    a=2

常亮:被 final(这个是java的)、const  define 修饰,无法变更值//final int b=6;  b无法被修改

2、位数运算

一直除到商为0

 为了方便运算,补充到8位数结果为:  00111100 

A = 0011 1100       //60的二进制

B = 0000 1101      //13的二进制

A & B = 0000 1100       //对应的位置数字相同

A | B =  0011 1101       //对应的位数 都为0则为0,都为1则为1,有0和1则为1

A ^ B = 0011 0001       //对应的位数相同则为0 不同则为1

~A = 1100 0011           //

3、结构体

#include <stdio.h>

struct Books
{
    char title[50];
    char author[50];
    char subject[100];

} book = {"课程学习", "风飞沙", "历史"};

int main()
{
    printf("Book title: %s\n", book.title);
    printf("Book author: %s\n", book.author);
    printf("Book subject: %s\n", book.subject);

    return 0;
}

推荐

#include <stdio.h>

struct Books
{
    char title[50];
    char author[50];
    char subject[100];
};

void printBooks(struct Books book)
{
    printf("Book title: %s\n", book.title);
    printf("Book author: %s\n", book.author);
    printf("Book subject: %s\n", book.subject);
    printf("===========\n");
}

int main()
{
    struct Books book1 = {"课程学习", "风飞沙", "语文"};
    struct Books book2 = {"模拟考试", "风飞沙", "数学"};
    struct Books book3 = {"课程预习", "风飞沙", "语文"};

    printBooks(book1);
    printBooks(book2);
    printBooks(book3);

    return 0;
}

 C中的结构体不同与java中的实体类

关键字:struct   没有方法体

4、指针 

#include <stdio.h>
#include <string.h>

struct Books
{
    char title[50];
    char author[50];
    char subject[100];
};

// 加上*号就是指针
void printBooks(struct Books *book)
{
    // 使用指针访问结构体成员 指针箭头 "->"
    printf("Book title: %s\n", book->title);
    printf("Book author: %s\n", book->author);
    printf("Book subject: %s\n", book->subject);

    // 通过指针修改结构体成员
    strcpy(book->title, "C Programming");

    printf("变更后的-->Book title: %s\n", book->title);
    printf("===========\n");
}

int main()
{
    struct Books book1 = {"课程学习", "风飞沙", "语文"};
    struct Books book2 = {"模拟考试", "风飞沙", "数学"};

    // 传入结构体指针  &book1
    printBooks(&book1);
    printBooks(&book2);

    // 调用被修改的结构体成员
    printf("通过变量调用-->Book title: %s\n", book1.title);
    return 0;
}

5、预处理器 

#include <stdio.h>

// 预处理器   规范大写 常量
#define MAX_SIZE 100
#define NAME "预处理器"

#define MAX(a, b) (a > b) ? a : b
// 如果(x) * (x)不加括号 调用函数SQUARE(2+1)算法会变成>  2+1*2+1
#define SQUARE(x) (x) * (x)
#define SQUARE2(x) x *x

// 宏延续符   "\"
#define SQUARE3(x) \
    (x) * (x)

// 如果屏蔽则会走  INFO_LOG  否则走  DEBUG_LOG
//  #define DEBUG

#ifdef DEBUG
#define LOG(x) printf("DEBUG_LOG: %s\n", x)
#else
#define LOG(x) printf("INFO_LOG: %s\n", x)
#endif

// 粘贴功能 不明所以
#define tokenpaster(n) printf("粘贴 = %d\n", token##n)

int main()
{

    printf("MAX_SIZE %d\n", MAX_SIZE);
    printf("NAME %s\n", NAME);
    printf("MAX(1,2)最大数 %d\n", MAX(1, 2));
    //(2+1)*(2+1)
    printf("SQUARE(2) 平方 %d\n", SQUARE(2 + 1));
    printf("SQUARE(2) 平方 %d\n", SQUARE2(2 + 1));
    printf("SQUARE(2) 平方 %d\n", SQUARE3(2 + 1));

    // 方式一
    LOG("INFO");

// 方式二 扩展: 只有debug没有被屏蔽才会执行打印方式
#ifdef DEBUG
    printf("DEBUG_LOG: %s\n", "DEBUG");
// #else
//     // 如果debug被屏蔽则执行这个打印方式
//     printf("INFO_LOG: %s\n", "INFO");
#endif

    int token34 = 40;
    tokenpaster(34);
    printf("token34= %d\n", token34);

    return 0;
}

关键字

#define   #ifdef    粘贴功能

6、别名 typedef

#include <stdio.h>

// 当变量比较多是,可避免重复的调用 unsigned int去声明变量,直接使用别名
typedef unsigned int uint;

typedef struct Books
{
    char title[50];
    char author[50];
    char subject[100];
} Book;

int main()
{

    // 使用别名
    uint a = 10;
    printf("%u\n", a);

    // 不使用别名
    unsigned int b = 20;
    printf("%u\n", b);

    struct Books book1 = {"课程学习", "风飞沙", "语文"};
    printf("%s\n", book1.title);

    // 使用别名
    Book book2 = {"模拟考试", "风飞沙", "数学"};
    printf("%s\n", book2.title);
    return 0;
}

7、枚举 enum

#include <stdio.h>

typedef enum
{
    MON = 1,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN,

} DAY;

int main()
{

    printf("%d\n", MON);
    printf("%d\n", TUE);

    return 0;
}

8、多文件(自定义工具类) 

util_1.h  //只存放实现类的方法

// 头文件   util_1.h
void print_util_1();

 util_1.c   //实现类

#include <stdio.h>

//源文件 util_1.c
void print_util_1()
{
    printf("This is util_1\n");
}

调用的文件

demo6.c   //文件内导入 util_1.h 文件

#include <stdio.h>

//导入系统工具使用符号<>  导入自定义的工具使用双引号  ""
#include "util_1.h"

int main()
{
	print_util_1();
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值