C语言
标准
1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作
1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSI C(C89)
1999年,国际标准化组织ISO又对C语言标准进行修订,在基本保留原C语言特征的基础上,针对应该的需要,增加了一些功能,命名为C99
2011年12月,ANSI采纳了ISO/IEC 9899:2011标准。这个标准通常即C11,它是C程序语言的现行标准
数据类型
类型 | 含义 | 32位编译器中大小(一般) | 64位编译器中大小(一般) | 最小值(32位) | 最大值(32位) |
---|---|---|---|---|---|
bool(stdbool.h) | 布尔类型 | 1byte | 1byte | false | true |
char | 单个字符 | 1byte | 1byte | -27 | 27-1 |
short | 短整形 | 2byte | 2byte | -215 | 215-1 |
int | 整形 | 4byte | 4byte | -231 | 231-1 |
long | 长整形 | 4byte | 8byte | -231 | 231-1 |
long long | 长整形 | 8byte | 8byte | -263 | 263-1 |
float | 单精度浮点数 | 4byte | 4byte | -2127 | 2128 |
double | 双精度浮点数 | 8byte | 8byte | -21023 | 21024 |
long double | 扩展精度浮点数 | 12byte | 16byte | -216383 | 216384 |
char* | 字符常量或字符串常量 | 4byte | 8byte | 无意义 | 无意义 |
变量作用域
变量有两种类型:局部变量全局变量,变量作用域即变量可使用的范围。
对于局部变量可以简单理解为大括号{}内即为一个作用域,变量在哪个大括号内,作用域就在哪。
对于全局变量的作用域就是在当前的.c文件中,在.h文件声明后可以在整个项目内使用。
对于同名变量,小作用域的变量会在其作用域中覆盖大作用域的变量。
运算符优先级
条件语句
if语句
if语句一般格式:
if
else if
else
if依据后面的条件语句的结果进行判断,非0为真,0为假
switch语句
switch语句一般格式:
switch是传入整数并判断整数进行判断
switch(ch){
case 'a':
...
break;
case 'b':
...
break;
default:
...
}
while语句
while语句的一般格式:
while(条件)
{
语句
}
while适用于不知道次数的循环
do while语句
do while语句的一般格式:
do{ 语句 }while(条件);
do while适用于不知道次数且要先做一遍的循环
for语句
for语句的一般格式:
for (初始化变量; 条件; 变量操作) { 语句 }
跳转语句
break;直接跳出当前条件语句或迭代语句,能且只能 跳出 当前 的 一个 语句。
continue;在 条件语句 中表示什么都不做(替代空语句);在 迭代语句 中表示 直接进入下一轮循环,不执行完当前循环 。
goto;跳转到指定位置(该位置必须有声明)
函数
(一)函数一般格式
返回值类型 函数名(形参列表)
{
...语句...
return 返回值;
}
// 例子,main函数
int main(){ return 0; }
结构体中的函数
如果能在结构体中写函数,那么结构体就更接近一个类了,例子如下:
struct SHOWDATE{
void (*show)(int year, int month, int day);
};
static void show(int year, int month, int day){
printf("%d-%d-%d", year, month, day);
}
static SHOWDATE showDate={.show=show};
int main(){
showDate.show(2020, 1, 1);
return 0;
}
指针
int a=10;
int *p=&a; // (1)(2)
*p = 12; // (3)
int * const p1; // (4)
const int * p2; // (5)
int const * p3;
*
代表这是一个指针类型。具体到例子中就一个int *p
类型,代表p存放一个指向int类型的地址
&
代表取地址。在例子中就是取int类型变量的地址,即变量a的地址
*p
代表一个变量,这个变量就是p所指地址里面的变量
int * const p1;
不能修改p里的地址
const int * p2;
和int const * p3;
不能修改p里地址对应的值
字符串
字符串在c语言中有两种形式char*
和char[]
,这里简单分辨下两者之间的不同。char* c1="HelloWorld!"
中,c1指向代码段中的常量,只读不写,且常量相同,指向的地址也相同。char c2[]="HelloWorld!"
中,c2指向堆栈段中的数据,可读可写,相当于把代码端的数据拷贝了出来。
union作为关键字与struct类似,但是struct中每个成员都是单独的内存,而union只占最大成员变量的大小,通常用与二进制与十进制的转换。
enum枚举,枚举类似#define,但是有体系些(c语言的枚举不好用)
// 声明枚举, 默认下标RED:0, YELLOW:1, GREEN:2
enum COLOR1 {RED1, YELLOW1, GREEN1};
// 自定下标
enum COLOR2 {RED2=1, YELLOW2, GREEN2=5};
参考资料
最后编辑:SteveChen 更新时间:2025-05-04 00:25