C语言复习线第一篇,前几天总结的C语言难记知识点。
#include “头文件”1 | #include <头文件> |
---|---|
在当前文件夹中寻找,当前文件夹中没有找到就去系统库中寻找 | 直接在系统库中检索头文件 |
#define 标识符 常量
#define:在预编译时将所有该标识符替换为该常量。
#define与typedef的区别:
#define 标识符 常量 | typedef 类型名 类型别名 |
---|---|
预编译是处理,将标识符替换为常量 | 编译时处理,给当前作用域内的类型赋一个别名 |
变量定义:用于为变量分配储存空间,还可为变量赋初始值。在程序中每个变量有且只有一个定义
变量声明:用于向程序表明变量的类型和变量名。
定义也是声明:定义变量的同时声明了类型和名字
extern:声明 (此次声明)不是定义,即该变量的定义在其他文件,再次只进行声明。
当在声明时进行初始化时,相当于定义,即:
int a = 1; <=> extern int a = 1;
任何再多文件中使用的变量都需要有与定义分离的声明,即在一个definition.c文件中进行定义,在需要引用该变量的.c文件中包含definition.h后使用extern进行声明。定义只能有一个,生命可以有无数个。
#include
#include "dedinition.h"
extern int a;//声明,a的定义在definition.c
//声明外部变量时可以把变量类型省略,如:extern a。;
extern int b = 1;//对声明进行初始化,即定义。;
/*extern 声明只有在在函数外部时可初始化,
如果其他文件中已有b的定义,这样会报错,相当于进行了重复定义。*/
int main(void)
{
int c = 1;//定义一个变量并初始化。
int c = 2;//重复定义,会报错。
int d; //定义一个变量,不初始化。
extern int e;//在该函数中引用外部变量e。
extern int f = 1;//不允许的初始化方式,会报错。
return 0;
}
数据类型 | 长度 | 输出类型 |
---|---|---|
int | 4Byte | %d或%i |
short | 2Byte | %d或%i |
long | 8Byte | %ld |
char | 1Byte | %c |
位、字节、字:
位 | 字节 | 字 |
---|---|---|
bit | Byte | word |
1 | 11111111 | 处理器位数个bit |
位(bit):每一个位只能为0或1两个状态。
字节Byte:8位二进制数据组成一个字节(Byte),他是储存空间的基本计量单位。
一个英文字母占一个字节,一个中文字符占两个字节。
字(word):由若干个字节构成,字的长度为字长,字长由系统的位数决定。
定义:类型说明符 数组名[常量表达式];
int a[3];
数组a中有三个元素:a[0]、a[1]、a[2]
数组的初始化:
int a[3] = {0,1,2};//定义是初始化只能顺序初始化,未赋值的默认初始化为0
int a[3] = {0,1};//此时a[2] = 0
int a[] = {0,1,2};//自动定义a有三个元素
错误的初始化:
int a[]; //✖
int a[3] = {}; //✖
int a[3] = {0,1,2,3}; //✖
【注】:
数组名除表示该数组外还表示数组的首地址;
数组中元素在内存中的地址是连续分配的。
定义:
1.先定义在声明:
struct s_name
{
成员;
};//定义
struct s_name varname;//声明变量
2.定义的同时声明:
struct s_name
{
成员;
}var1,var2;//定义的同时声明var1,var2两个变量
struct s_name varname;//需要其他变量时还可以继续声明变量
或者
struct
{
成员;
}var1,var2;//定义的同时声明var1,var2两个变量,该结构体只有两个变量,无法继续声明其他变量
3.使用typedef定义结构体
typedef struct s_name
{
成员;
}tt;//tt表示struct s_name这个数据类型,之后可以使用tt直接定义新的结构体变量
结构体初始化:
struct s_name
{
int a;
int b;
int c;
}varname;
struct s_name varname = {1,2,3};//顺序赋值
struct s_name varname = {.a = 1,.c = 3};//乱序赋值C语言风格
struct s_name varname = {a:1,.c:3};//乱序赋值C++风格
/*先定义后初始化*/
varname.a = 1;
varname.b = 2;
varname.c = 3;
#:预编译(或预处理)标识。预编译不是编译,而是在编译前对预编译标识后代码的处理。 ↩︎