目录
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;
}