C语言-基础知识
1: * C 语言是一种通用的、面向过程式的计算机程序设计语言。
C 语言是一种通用的高级语言。
最新的C语言标准是C18.
2: ** 预处理器指令
导入头文件
条件编译
宏定义
3: **** C语言关键字
关键字 说明 auto 声明自动变量 register 声明寄存器变量 static 声明静态变量 extern 声明变量或函数是在其它文件或本文件的其他位置定义 const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变 static 声明静态变量 struct 声明结构体类型 union 声明共用体类型 void 声明函数无返回值或无参数,声明无类型指针 volatile 说明变量在程序执行中可被隐含地改变
4:C 常量
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
定义常量
在 C 中,有两种简单的定义常量的方式:
使用 #define 预处理器。
使用 const 关键字。
5: * C 存储类
存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。
这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:
auto
register
static
extern
6: ** C 判断
C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。
7: *** C 作用域规则
全局变量、局部变量、形式参数
全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。
在程序中,局部变量和全局变量的名称可以相同,但是在函数内,如果两个名字相同,会使用局部变量值,全局变量不会被使用。
*** 全局变量与局部变量在内存中的区别:
全局变量保存在内存的全局存储区中,占用静态的存储单元;
局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化
8: 枚举
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; day = WED;
9: **** 指针
每一个变量都有一个内存位置,
每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。
内存地址是16进制的数据
0x7ffeeaae08d8
指针也就是内存地址,指针变量是用来存放内存地址的变量。
定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。
#include <stdio.h> int main () { int var = 20; int *ip; ip = &var; printf("var 变量的地址: %p\n", &var ); printf("ip 变量存储的地址: %p\n", ip ); printf("*ip 变量的值: %d\n", *ip ); return 0; }
if(ptr) //如果 p 非空,则完成
if(!ptr) //如果 p 为空,则完成
10: 函数指针 block回调 fun_ptr block的名字
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型
// 定义一个block,起一个别名
typedef void (^BARCustomAlertViewBlock)(void);
// 声明一个block变量
@property (readwrite, copy) BARCustomAlertViewBlock cancelButtonAction;
// C语言函数 /* 函数返回两个数中较大的那个数 */ int max(int num1, int num2) { /* 局部变量声明 */ int result; if (num1 > num2) { result = num1; } else { result = num2; } return result; }
11: ***** 结构体
// 1:定义结构体 struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; // 2:给结构体起一个别名 typedef struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } Book; // 3:指向结构体的指针 Book Book1; strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; // 声明一个结构体指针 Book *bookPointer; // 把结构体的内存地址赋值给指针 bookPointer = &Book1; // 为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符, char str[10] = bookPointer->title;
12: C 共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。
如果都有值的时候,部分成员的值会有损坏
union Data {
int i;
float f;
char str[20];
};
13: C typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。
typedef vs #define
#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的
14: C 输入 & 输出
当我们提到 输入 时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。
当我们提到 输出 时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。
scanf() 和 printf() 函数
int scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。
15: C语言标准库
C 标准库 - <ctype.h>
C 标准库 - <stdio.h>
C 标准库 - <stdlib.h> **** calloc、malloc、realloc、cfree
C 标准库 - <string.h>
C 标准库 - <time.h>