C语言学习3——基本的C语言语法知识
- 标识符
- 关键词
- 什么是字面常量?
- printf函数
- printf函数更多用法
- #include命令
标识符
在前面的代码中,由我们自己命名,用于指代某一个实体的名称,例如:add,result,函数的参数a,b
都是一个 标识符 。
标识符由我们自己命名的一个特殊标识,用于表示一个变量、函数或其他实体的名称。
例如前面我们的自定义函数取名为add是为了清晰地表明函数意图。而将变量命名为result,也是为了表
明变量内保存的是函数返回的结果。
并且,要让编译器能够识别标识符,必须进行声明或定义。例如,add被定义成了一个函数,result,
a,b被声明成了一个整数类型变量。如果编译器遇到未经定义或声明的标识符,将会无法理解这个标识
符具体是一个什么实体的名称而报错。
在C语言中,标识符的可以按照你的喜好自己随意命名,但是必须遵循以下规则:
标识符可以用小写字母、大写字母、数字和下划线来命名。但是,标识符的第一个字符必须是字母或下划线,而不是数字。并且,标识符区分大小写。
关键词
我们再思考一个问题,int是一个 标识符 吗?
答案是不是。首先int并不是我们随意命名的,其次int并不是任何实体的名称。
int是C语言中的一个 关键词 。
关键词 是在语言标准中规定的,并且在代码中有特殊意义和用途。因此,关键词不能作为一个标识符来
使用。
C语言中的关键词如下表所示。
项目 | Value | Value | Value |
---|---|---|---|
auto | _Bool* | break | case |
char | _Complex* | const | continue |
default | restrict* | do | double |
else | enum | extern | float |
for | goto | if | _Imaginary* |
inline* | int | long | register |
return | short | signed | sizeof |
static | struct | switch | typedef |
union | unsigned | void | volatile |
while |
什么是字面常量?
那么,像2,3,这种数值,需不需要声明呢?
不需要,他们是 常量 ,无法被更改。并且一旦被写出来,就已经知道它们是整型int类型的常量了。
同样的, 字符串字面常量 也不需要被声明,例如:“Hello World\n”。被双引号包裹的,我们认为它是一个字符串,以区别于数值。
变量我们可以通过赋值来更改,常量不能更改,所以你不能对它进行赋值。
2 = 3; // 错误
"Hello" = "World"; // 错误
printf函数
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
现在,你应该明白了这段代码的大部分含义了。我们再进一步,把它全部解析完。
和 add 一样, printf 也是一个函数,但是这个并不是一个自定义函数,而是一个系统自带的函数。
我们把字符串字面常量 “Hello World\n” 传给了 printf函数 。运行代码时,我们在屏幕上看到了这行字
符。显然, printf函数 的作用就是将字符串输出到控制台上了。
printf 由单词 print(打印) 和单词 format(格式) 的首字母f组成,意为格式化打印。
在早期,计算机的输出主要是靠连接打印机将字符打印在纸张上。而如今,计算机的输出大部分都在屏
幕上实现。但是print这个词却被保留了下来。有时候我们会沿用打印这种说法,而实际上,我们是在屏
幕上的控制台中输出字符。
printf函数更多用法
int main()
{
int result;
result = add(2, 3);
printf("%d", result);
return 0;
}
让我们再次比较两段代码,我们写 Hello World 时只传了1个参数给 printf ,但为什么在 add函数 后却
能传2个给它呢?函数定义的参数个数和类型需要和函数调用时候的保持一致吗?
printf 是一个很特别的函数,它是一个 变参函数 ,所以可以接受可变数量和类型的输入参数。这里我
们无需太过关心怎样写一个可变参数函数,暂时只需要使用它即可。
通过如下示例,我们可以简单了解 printf函数 的更多用法。
用于打印一个整数:printf(“%d”, 整型int);
printf("%d", 12345);
用于打印两个整数:printf(“%d\n%d\n”, 整型int1, 整型int2);
// \n表示换行,就是从下一行开始再继续打印
printf("A=%d\nB=%d\n", 123, 456);
我们来总结一下 printf 的公式
printf("XXX占位1 XXX 占位2 XXX占位3", 替换1, 替换2, 替换3);
printf 的第一个参数必须是 字符串 ,这里我们传入了一个字符串字面常量(被双引号包裹)。其中,
占位用 %转换操作 表示。例如:整型int的占位符为 %d 。后面的替换参数,会依次替换前面的占
位。 printf 是一个变长参数函数,只要第一个字符串参数占位符写对了,后面可以加任意多的替换参
数。
#include命令
printf函数 并不是我们定义的函数,而是系统自带的函数。这个函数被写在文件 stdio.h 中,我们要使
用 printf 就必须先让编译器理解 printf 。
我们假定 printf 的函数定义写在文件 stdio.h 中,用 #include 命令,可以将文件 stdio.h 的代码复制
到我们的代码中。
TIPS:
stdio.h里面并未定义printf函数,但是它里面有printf函数的函数声明。但是,在当前阶段里面,你可以
理解为stdio.h里面,写了printf的函数定义。