基本类型
- 数值类型:
- 整型数:(unsigned) int (4 bytes)、(unsigned) short (2 bytes)、(unsigned) long (8 bytes)
- 浮点数:float (4 bytes)、double (8 bytes)
- 字符类型:char (1 byte)
字符串操作
- 使用
strlen
取字符串的长度; - 使用
strchr
取某个字符第一次出现的位置(指针); - 使用
strcpy
将一个字符串复制到另一个字符串中; - 使用
strcat
将一个字符串追加到另一个字符串中。
读写文本文件
- 使用
fopen
函数打开文件,获得文件句柄。r
模式为读,a
模式为追加写,w
为覆盖写。 - 使用
fgets
函数从文件中读取一行,读到文件末尾时会返回'\0'
。 - 使用
fputs
函数向文件中写一行。 - 使用
fclose
函数关闭文件。
堆内存
变量,数组,函数(我猜哦),结构体,其内存都是分配在栈上的;随着程序的运行,栈上的内存可能会被频繁地调整(也是我猜的哦)。所以,我们还可以手动从堆上去获取内存,并在合适的时候手动释放之。当内存比较大的时候,性能会比在栈上要好。
- 使用 malloc 函数(定义在 stdlib 中)获取内存,返回
void *
类型的指针。 - 使用 realloc 函数重新指定内存的大小(若需扩大则从堆中重新分配一段,若需减小则回收一部分内存);
- 使用 free 函数释放内存(全部回收)。
指向函数的指针
- 虽然函数不是一种普通变量,但是依然可以创建指向函数的指针。在创建函数指针时需要声明函数的签名(参数和返回值),然后在函数名称上使用取地址符号(
&
)。 - 指针可以重新指向另一个具有相同签名的函数,这正是指向函数的指针的价值。
- 猜测,每一个函数在编译器看来都是不同的类型,分配的空间也不尽相同。无法生成「函数数组」,所以函数指针的加减运算基本没有意义。
数组
- 使用方括号定义数组类型
- 数组必须有长度
- 人为指定长度,如
int i[3]
- 根据初始化的值推测长度,如
int i[] = {1,2,3}
,数组字面量有大括号括起来(写惯了 JavaScript 很容易犯错)。
- 人为指定长度,如
- 即使不显式初始化,也会进行默认的隐式初始化操作,所以
int i[3]
相当于int i[] = {0,0,0}
。 - 用方括号加下标的方式访问数组元素。
标准库(入门)
printf
方法来自标准库,此函数支持以模板字符串的方式打印消息,是 C 语言编写的程序向外输出消息的最直接通道。
printf("%d\n", 127); // 127
printf("%o\n", 177); // 177 八进制
printf("%x\n", 177); // b1 十六进制
printf("%f\n", 314.15); // 314.159000
printf("%.2f\n", 314.15); // 314.15 指定精度
printf("%e\n", 314.15); // 3.141590e+02
printf("%c\n", 'c'); // c
printf("%s\n", "hello"); // hello
sizeof运算符
- sizeof运算符用于获得数据类型或表达式的长度(它不是一个函数)
用法:
- sizeof(object);//sizeof(对象);
- sizeof object;//sizeof(对象);
- sizeof(type_name);//sizeof(数据类型);
- 注:当获得对象的长度时,()可以加,也可以不加,但是获得数据类型的长度时,必须加上()。
C 共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。
定义共用体
为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
union tag 是可选的,每个 member definition 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在共用体定义的末尾,最后一个分号之前,您可以指定一个或多个共用体变量,这是可选的。下面定义一个名为 Data 的共用体类型,有三个成员 i、f 和 str:
union Data { int i; float f; char str[20]; } data;
现在,Data 类型的变量可以存储一个整数、一个浮点数,或者一个字符串。这意味着一个变量(相同的内存位置)可以存储多个多种类型的数据。您可以根据需要在一个共用体内使用任何内置的或者用户自定义的数据类型。
C typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:
typedef unsigned char BYTE;
在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:
BYTE b1, b2;
按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但您也可以使用小写字母,如下:
typedef unsigned char byte;