一.main函数
-
每个C语言程序不管有多少行代码,都是从 main 函数开始执行的,main 函数是程序的入口,main 函数也被叫做:主函数。main 前面的 int 表示 main 函数执行结束的时候返回一个整型类型的值。所以在 main 函数的最后写 return 0;正好前呼后应。
-
使用 int 作为 main 函数返回类型是最标准和推荐的方式。 int 作为返回类型意味着 main 函数要返回一个整数值。一般来说,返回 0 表示程序正常结束,返回非零值表示程序执行过程中出现了某种错误。
-
使用 void 作为 main 函数返回类型(不推荐但部分编译器支持) 有些编译器允许 main 函数返回类型为 void ,即 void main() 。当使用 void 作为返回类型时, main 函数不需要返回任何值。但这种写法不符合C语言标准(C89、C99等标准都规定 main 函数应该返回 int ),在不同编译器之间的兼容性可能存在问题,并且无法通过返回值向操作系统传达程序的执行状态。
-
main函数有且只有一个,即使一个项目中有多个.c 文件,也只能有一个 main 函数(程序的入口只能有一个)。
二.C语言的关键字
-
关键字都有特殊的意义,是保留给C语言使用的。
-
程序员自己在创建标识符的时候是不能和关键字重复的。
-
关键字是不能自己创建的。
-
C语言的常见32个关键字
1.数据类型关键字(12个)
基本数据类型:
字符型:char
整型:int short long
实型(浮点型):float double
类型修饰关键字:
有符号类型:signed
无符号类型:unsigned
常量修饰:const
易失性修饰:volatile
复杂数据类型:
枚举类型:enum
联合类型:union
2.存储类型关键字(5个)
自动变量:auto
静态变量:static
寄存器变量:register
外部变量声明:extern
类型定义:typedef
3.流程控制关键字(12个)
条件判断:
单分支:if
双分支:else
多分支:switch case default
循环控制:
for 循环:for
while循环:while
do-while循环:do
跳出循环:break
结束本次循环,进入下一次:continue
无条件跳转
跳转到指定标签处:goto
从函数返回:return
4.特殊关键字(3个)
空类型:void
求字节数:sizeof
结构体类型:struct
- 在C99标准中加入了 inline restrice _Bool _Complex _Imaginary等关键字。
- 还有其它关键字见https://zh.cppreference.com/w/c/keyword
三.字符和ASCII编码
-
C语言中的字符是用单引号括起来的,如:‘a’,‘b’,‘@’。
-
计算机所有的数据都是以二进制的形式存储的,字符在内存中以ASCII的方式来存储。
- 字符 A-Z 的 ASCII 码值是 65-90
- 字符 a-z 的 ASCII 码值是 97-122
- 对应的大小写字符(a和A)的ASCII码值的差值是 32
- 数字字符 0-9 的 ASCII 码值是从 48-57
- \n 的 ASCII 码值是 10
- 这些字符中 ASCII 码值 0-31 这 32 个字符是不可打印字符,无法打印在屏幕上观察
四.字符串和\0
-
C语言中使用双引号括起来的一串字符就被称作字符串,如:“abcdef”,就是一个字符串。
-
C语言字符串中一个特殊的知识,就是在字符串的末尾隐藏放着一个 \0 字符,这个 \0 字符是字符串的结束标志。
-
strlen 函数计算字符串长度时,只会统计到 \0 之前的字符个数,不包含 \0 本身。
例如字符串 "abc" 实际存储为 'a','b','c','\0' , strlen 返回 3 。 -
如果字符串中主动包含 \0 (例如通过代码手动写入),那么 strlen 会遇到第一个 \0 就停止计数,后面的字符会被忽略。
举例:
char str[] = "hello\0world"; // 实际存储:'h','e','l','l','o','\0','w','o','r','l','d','\0'
int len = strlen(str); // len 的值是 5(只统计到第一个`\0`前的字符)
原因:
strlen 是根据 \0 判断字符串结束位置的,不会关心 \0 是字符串本身的内容还是结尾标记。