1991:泡沫的余晖与时代的印记

核心内容摘要

汤姆叔叔温馨提示:只需30秒,推开生活另一扇窗的密钥
男生定眼78秒

困困兔下海

C语言核心知识

分关键字、基础语法、数据类型

C语言32个关键字分类

1 数据类型关键字12个// 基本类型 char // 字符型1字节 int // 整型通常4字节 float // 单精度浮点4字节 double // 双精度浮点8字节 void // 空类型 // 类型修饰符 short // 短整型 long // 长整型 signed // 有符号 unsigned // 无符号 // 构造类型 struct // 结构体 union // 共用体 enum // 枚举

2 存储类关键字5个auto // 自动变量默认 extern // 外部变量声明 register // 寄存器变量 static // 静态变量 typedef // 类型重定义

3 控制语句关键字12个// 条件语句 if else switch case default // 循环语句 for while do // 跳转语句 break continue goto return

4 其他关键字3个const // 只读常量 volatile // 易失性变量 sizeof // 求大小运算符

关键字的详细用法

1 static关键字最重要//

静态局部变量 - 生命周期延长 void test() { static int count 0; // 只初始化一次 count; printf(调用次数%d\n, count); } // test()第一次调用输出1第二次输出2第三次输出3 //

静态全局变量 - 作用域限制 static int hidden 100; // 只能在当前文件访问 //

静态函数 - 作用域限制 static void secret() { // 只能在当前文件调用 printf(私有函数\n); }

2 const与volatile// const定义常量 const int MAX 100; // 常量 const int* p1 a; // 指向常量的指针值不可变 int* const p2 a; // 常量指针指向不可变 const int* const p3 a; // 都不可变 // volatile防止编译器优化 volatile int flag 0; // 每次都从内存读取 while(flag

{ // 不会优化成无限循环 // 等待外部改变flag }

3 extern与register// extern跨文件使用变量 // file

c int global 100; // 定义全局变量 // file

c extern int global; // 声明外部变量 printf(%d, global); // 输出100 // register建议使用寄存器 register int i; // 快速访问的局部变量 for(register i0; i10000; i) { // 频繁使用的循环变量 }

基本数据类型

1 整数类型类型字节范围有符号范围无符号char

~ 1270 ~ 255short

~ 327670 ~ 65535int4-

1e9 ~

1e90 ~

2e9long4/8-

1e9~

2e180~

8e

1

2 浮点类型float f

14f; // 单精度

位有效数字 double d

1415926; // 双精度

位有效数字 long double ld

14L; // 扩展精度

3 void类型//

函数无返回值 void func(void) { // 没有返回值 } //

函数无参数 int get_value(void) { return 100; } //

void指针 void* ptr; // 通用指针 ptr int_var; ptr char_var;

运算符与表达式

1 算术运算符 - * / % // 加 减 乘 除 取余 -- // 自增 自减 // 注意整数除法 int a 5 / 2; // 结果是2不是

5 float b

0 / 2; // 结果是

2.

5

2 关系运算符 // 大于 大于等于 小于 小于等于 ! // 等于 不等于

3 逻辑运算符c || ! // 与 或 非 // 短路特性 if(a0 b

// 如果a0b0不会判断 if(a0 || b

// 如果a0b0不会判断

4 位运算符 | ^ ~ // 与 或 异或 取反 // 左移 右移 // 示例 unsigned char a 0b00101100; unsigned char b 0b00001111; a b 0b00001100 // 按位与 a | b 0b00101111 // 按位或 a ^ b 0b00100011 // 按位异或 ~a 0b11010011 // 按位取反 a 2 0b10110000 // 左移2位 a 2 0b00001011 // 右移2位

5 赋值运算符 - * / % | ^

6 其他运算符sizeof() // 求字节大小 (type) // 强制类型转换 ? : // 三目运算符 // 取地址 * // 解引用 . // 结构体成员 - // 结构体指针成员 [] // 数组下标 () // 函数调用

控制语句

1 条件语句// if-else if(score

{ grade A; } else if(score

{ grade B; } else { grade C; } // switch-case switch(level) { case 1: printf(初级\n); break; case 2: printf(中级\n); break; case 3: printf(高级\n); break; default: printf(未知等级\n); }

2 循环语句// for循环 for(int i0; i10; i) { printf(%d , i); } // while循环 int i 0; while(i

{ printf(%d , i); i; } // do-while循环 int i 0; do { printf(%d , i); i; } while(i

;

3 跳转语句// break - 跳出循环或switch for(int i0; i10; i) { if(i

break; printf(%d , i); // 输出0 1 2 3 4 } // continue - 跳过本次循环 for(int i0; i10; i) { if(i

continue; printf(%d , i); // 输出0 1 2 3 4 6 7 8 9 } // goto - 跳转到标签 if(error) { goto cleanup; } // ... 正常代码 cleanup: free(resource); return;

输入输出函数

1 标准输入输出#include stdio.h // 输出函数 printf(格式字符串, 参数); // 格式化输出 puts(字符串); // 输出字符串并换行 putchar(A); // 输出单个字符 // 输入函数 scanf(格式, 变量); // 格式化输入 gets(字符串); // 读取一行不安全 getchar(); // 读取单个字符 // 格式说明符 %d // 十进制整数 %f // 浮点数 %c // 字符 %s // 字符串 %p // 指针 %x // 十六进制 %o // 八进制

2 示例int age; float score; char name[20]; printf(请输入姓名、年龄、成绩); scanf(%s %d %f, name, age, score); printf(姓名%s\n, name); printf(年龄%d\n, age); printf(成绩%.2f\n, score);

预处理指令

1 文件包含#include stdio.h // 系统头文件 #include myheader.h // 用户头文件

2 宏定义// 对象宏 #define PI

1415926 #define MAX 100 // 函数宏 #define SQUARE(x) ((x)*(x)) #define MAX(a,b) ((a)(b)?(a):(b)) // 多行宏 #define SWAP(a,b) do { \ typeof(a) temp a; \ a b; \ b temp; \ } while(

0)

3 条件编译#ifdef DEBUG printf(调试模式\n); #endif #ifndef HEADER_H #define HEADER_H // 头文件内容 #endif #if VERSION 2 // 版本2以上的代码 #elif VERSION 2 // 版本2的代码 #else // 旧版本代码 #endif

4 其他指令#undef PI // 取消宏定义 #pragma once // 防止头文件重复包含 #line 100 newfile.c // 修改行号和文件名 #error 编译错误 // 产生编译错误 #pragma message(信息) // 编译时显示信息

类型定义typedef

1 基本用法// 为现有类型创建别名 typedef int INT32; typedef unsigned char BYTE; typedef float FLOAT32; // 使用 INT32 a 100; BYTE b 0xFF; FLOAT32 c

14f;

2 复杂类型定义// 数组类型 typedef int INT_ARRAY[10]; INT_ARRAY arr; // 等价于 int arr[10]; // 函数指针类型 typedef int (*COMPARE_FUNC)(int, int); COMPARE_FUNC cmp compare; // 结构体类型 typedef struct { int x; int y; } POINT; POINT p1, p2; // 直接使用不需要struct关键字

类型转换

1 隐式类型转换// 自动转换规则低精度→高精度 char → short → int → long → float → double int a 10; float b

14; float c a b; // a自动转换为float // 整数提升 char c1 100, c2 100; int result c1 * c2; // char提升为int

2 显式类型转换// C风格 int a 10; float b (float)a / 3; // 强制转换 // 注意指针转换 int *p (int*)malloc(sizeof(int)); void *vp (void*)p; // 浮点转整数 float f

8; int i (int)f; // i3直接截断

3 类型转换

注意事项//

有符号与无符号混合 int a -1; unsigned int b 100; if(a b) { // a被转换为无符号结果很大 printf(这会发生\n); } //

浮点精度丢失 float f

1; if(f

0.

{ //

1默认是double比较会出问题 printf(这不会发生\n); }// 正确做法 if(fabs(f -

0.

1)

0.

{ printf(浮点数相等\n); }

天媒影视传媒免费完整版-天媒影视传媒免费完整版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123