标准

  • 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)布尔类型1byte1bytefalsetrue
char单个字符1byte1byte-2727-1
short短整形2byte2byte-215215-1
int整形4byte4byte-231231-1
long长整形4byte8byte-231231-1
long long长整形8byte8byte-263263-1
float单精度浮点数4byte4byte-21272128
double双精度浮点数8byte8byte-2102321024
long double扩展精度浮点数12byte16byte-216383216384
char*字符常量或字符串常量4byte8byte无意义无意义

变量作用域
变量有两种类型:局部变量全局变量,变量作用域即变量可使用的范围。

对于局部变量可以简单理解为大括号{}内即为一个作用域,变量在哪个大括号内,作用域就在哪。

对于全局变量的作用域就是在当前的.c文件中,在.h文件声明后可以在整个项目内使用。

对于同名变量,小作用域的变量会在其作用域中覆盖大作用域的变量。

运算符优先级
c-lang-priority.png

 

条件语句

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};

 

参考资料

C 语言入门教程

作者:SteveChen  创建时间:2025-05-03 11:11
最后编辑:SteveChen  更新时间:2025-05-04 00:25
上一篇:
下一篇: