C语言学习日记2:C语言基础语法知识
本文介绍了C语言基础语法知识,包括主函数main的作用和结构、自定义函数的编写与调用方法。通过一个简单的加法函数示例,讲解了函数声明、参数传递和返回值的使用。文章还解释了变量、标识符、关键字和字面常量的概念,以及printf函数的格式化输出功能。最后说明了#include指令的作用,用于引入系统头文件。这些内容为C语言初学者提供了基本的编程概念和语法规则。
一、前言
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
相信大家已经看过第一个示例代码的效果了,这个程序所实现的效果很简单,就是在屏幕上输出了一行字符串"Hello World";我们根据这一行代码,借此了解一下C语言的基础语法知识。
二、C语言基础语法知识
1、主函数
首先,主函数 main ,一个标准的主函数如下:
int main() //主函数
{
return 0;//主函数返回值
}
main 翻译成中文是主要的、最重要的意思,而在C语言里面表示一个主函数。双斜杠后面的为注释 ,打一个比较形象的比喻, 注释就类似于老师在作业上的批注,一般来说,注释用于标注这段代码的用途或解释思路等。因为注释不会被当作代码进行编译,所以无论添加什么注释内容,都不会对代码的实际运行产生任何影响。
如上段代码,用注释标注了哪个是主函数,哪个是是主函数的返回值。
2、写一个自己的函数
我们可以自己写一个函数来实现某些功能,这里我们编写一个两个整数相加的函数,这个函数需要做到:输入两个整数,返回它们相加的结果。
这个函数是用来计算加法的,所以我们可以将函数名称定义为add,函数名可以按照自己的喜好进行自定义,不过为了方便阅读理解,一般要让函数名称语义化。
int add(int a, int b)
{
return a + b;//返回a+b的值
}
如上段代码所示,这里我们定义了一个函数add,返回值类型为整形 int,输入值定义为两个整形变量,返回值是返回两个整数的和,两个加数都为整数,所以结果也是一个整数。
好了,这里我们已经成功写完了一个add函数,这一段代码被称之为add函数的函数定义。
3、主函数是整个C语言程序的入口
上面我们已经自己定义好了一个 add函数 ,那我们需要怎样来使用它呢? add函数能否直接运行呢?
答案是不行的。
所有的C语言代码都有一个起始入口,而这个入口就是 主函数main 。进入了主函数以后,才能经由主函数来调用其他函数。
这也意味着,每个C语言代码,有且只能有一个mian函数。
我们将代码稍作修改,如下段代码所示:
#include <stdio.h>
int add(int a, int b);//声明add函数
int main()
{
int sum;
sum = add(1,2);//调用add函数
printf("%d\n", sum);//将结果打印到控制台
return 0;//返回0
}
int add(int a, int b)
{
return a + b;//返回a+b的值
}
当程序运行时,首先会进入主函数main 。接着调用我们刚刚编写的add函数了。我们传了2个值分别是1和2给add函数。函数的定义中规定了需要传a、b,2个参数,我们调用的时候,也必须传2个,并且类型也需要尽量一致,否则编译可能会报错。(若类型不同,编译器会尝试自动类型转换。自动类型转换失败则会编译失败)
调用完后,通过printf函数将结果打印到控制台上,结果如下:

可以看到结果是3,说明我们成功地调用了add函数,并将结果输出了出来。
通过上面这段代码,我们会想到,主函数是被谁调用的?主函数的返回值类型必须是int吗?
主函数在程序开始的时候被自动调用,不需要在程序内主动调用主函数。
而主函数的返回值会返回给调用这个程序的程序。
C语言标准中规定主函数有返回值且必须是int。如果程序正常结束,一般将返回值设置为0。
4、要调用函数,必须先知道函数
我们再来看看,编译器是怎么理解 add 这个名称的。
编译器会从代码开始,按照从上往下的顺序阅读代码。看到这里你可能会疑惑,明明add函数在main主函数的下面,为什么还能正常调用?
这是因为我们在函数调用add函数前提前声明了add函数,让编译器知道了这段程序中有add这个函数,所以无论add函数在main主函数下面还是上面,都可以正常调用,函数声明十分重要,与后面的模块化编程有重要联系。这里先简单了解一下。
如果我们将函数声明去掉,将add函数放在main主函数上面,编译也是可以正常通过的。这是因为编译器看到了一个名为add函数的定义,在后面mian主函数要调用add时,由于编译器已经知道了 add 的定义,因此编译器可以正常编译通过。
反之,如果既没有进行函数声明,又将add函数放在了mian主函数的下面,那么编译器看到了 add 这个名称就会很疑惑, add 是什么呢?编译器无法理解 add 究竟是什么。因此,编译器将报错,并停止编译。
5、什么是变量
在 add函数 计算完毕之后,需要有一个东西来接受 add 返回回来的值。所以,我们在 add 前面声明了一个 int整型的变量 。
那么什么是变量呢?你可以把它看做一个空箱子,里面可以装任何其他的和它类型一致的值。
sum 只是我门给它起的一个名字,当然,你可以任意起名。
我们把 add 返回回来的3,装进了 sum 。因此, sum 里面装着的值就是3了。
而= 等号,在C语言中是赋值运算符,相信你已经发现它有把右边的值装进左边变量的功能了。和函数一样,这里的等号和数学里面的等号,也是有很大不同的,它并不是相等的意思。
赋值运算符:将符号右边的值,装进左边的变量的一种运算符。
6、标识符
在前面的代码中,由我们自己命名,用于指代某一个实体的名称,例如:add,sum,函数的参数a,b都是一个 标识符 。
标识符由我们自己命名的一个特殊标识,用于表示一个变量、函数或其他实体的名称。
例如前面我们的自定义函数取名为add是为了清晰地表明函数意图。而将变量命名为sum,也是为了表明变量内保存的是函数返回的结果。
并且,要让编译器能够识别标识符,必须进行声明或定义。例如,add被定义成了一个函数,sum,a,b被声明成了一个整数类型变量。如果编译器遇到未经定义或声明的标识符,将会无法理解这个标识符具体是一个什么实体的名称而报错。
在C语言中,标识符的可以按照你的喜好自己随意命名,但是必须遵循以下规则:
标识符可以用小写字母、大写字母、数字和下划线来命名。但是,标识符的第一个字符必须是字母或下划线,而不是数字。并且,标识符区分大小写。
7、关键词
首先,我们可以想一下,int是标识符吗?
答案是否定的,首先int并不是我们随意命名的,其次int并不是任何实体的名称。
int是C语言中的一个关键词 。
关键词是在语言标准中规定的,并且在代码中有特殊意义和用途。因此,关键词不能作为一个标识符来使用。
C语言中的关键词如下图所示。

8、什么是字面常量
像1,2,这种数值,需不需要声明呢?
不需要,他们是常量 ,无法被更改。并且一旦被写出来,就已经知道它们是整型int类型的常量了。
同样的, 字符串字面常量也不需要被声明,例如:"Hello World\n"。被双引号包裹的,我们认为它是一个字符串,以区别于数值。
变量我们可以通过赋值来更改,常量不能更改,所以你不能对它进行赋值。
9、printf函数
和 add 一样, printf 也是一个函数,但是这个并不是一个自定义函数,而是一个系统自带的函数。
把字符串字面常量 "Hello World\n" 传给了 printf函数 。运行代码时,我们在屏幕上看到了这行字符。显然, printf函数的作用就是将字符串输出到控制台上了。
printf 由单词 print(打印) 和单词 format(格式) 的首字母f组成,意为格式化打印。
printf 是一个很特别的函数,它是一个变参函数 ,所以可以接受可变数量和类型的输入参数。这里我们无需太过关心怎样写一个可变参数函数,暂时只需要使用它即可。
通过如下示例,我们可以简单了解 printf函数 的更多用法。
用于打印一个整数:printf("%d",整形int);
printf("%d", 12345);//这里将整数12345通过%d显示出来
用于打印两个整数:printf("%d\n%d\n", 整型int1, 整型int2);
printf("A=%d\nB=%d\n", 123, 456);// \n表示换行,就是从下一行开始再继续打印
printf 的第一个参数必须是字符串 ,这里我们传入了一个字符串字面常量(被双引号包裹)。其中,占位用 %转换操作表示。例如:整型int的占位符为 %d 。后面的替换参数,会依次替换前面的占位。 printf 是一个变长参数函数,只要第一个字符串参数占位符写对了,后面可以加任意多的替换参数。
10、#include命令
printf函数 并不是我们定义的函数,而是系统自带的函数。这个函数被写在文件 stdio.h 中,我们要使用 printf 就必须先让编译器理解 printf 。
我们假定 printf 的函数定义写在文件 stdio.h 中,用 #include 命令,可以将文件 stdio.h 的代码复制到我们的代码中。
更多推荐



所有评论(0)