今天是C语言
的第二次学习,经过上次的软件配置之后,就可以进行C语言
的编写和运行了,但是万丈高楼平地起
,因此,需要对一些C语言
的基础知识有一定的认识,才会在后续的学习中不会出现晕乎乎的感觉,这就是本次学习的主要内容,以下为本次的目录,不多说,开整!
什么是头文件呢,顾名思义就是写在开头的文件喽。它有什么作用呢?其作用是告诉机哥,哦不对是机器,我们将要编写引入一个文件,例如#include
,这表示我们将要引入一个标准的输入输出头文件即standard input output header file
,在声明了头文件之后,即可在文件里编写输入输出函数,一般就是写在.c
文件的开头。
主函数的定义方式有两种,但是另外一种已经很少使用了,如果各位感兴趣可以自行查询,目前最为广泛使用的便是int main(){}
这种定义主函数的方式,也许你会疑问为什么要写这行呢,其实,这是为了告诉电脑:程序的入口就在这里哦
,快进来执行吧,这样电脑才能知道从哪里开始执行代码。
其中的{}
中的代码就是函数的主体部分,即计算机将要执行的内容。
每一个.c
文件中都必须有一个主函数,并且有且只有
一个主函数,当同一个文件中出现两个主函数时,此处 写两个主函数如下:
就会编译出错,如下图所示:
提示在第二个主函数之前已经定义了一个主函数,所以编译出错,因此在每个.c
文件中只能有一个主函数。
打印函数printf
是编程中最为常用的一个函数,因为如果不把结果打印出来的话,你咋知道自己写的对不对呢,打印函数的打印方式有很多种,对于不同的变量类型有着不同的打印方式,较为常见的比如整型、字符类型、单精度浮点型、双精度浮点型、字符串类型、指针类型
等等,每个类型对应不同的打印命令,常用的总结如下表:
类型 | c格式 | 打印类型 |
---|---|---|
整型 | int | %d |
字符类型 | char | %c |
单精度浮点型 | float | %f |
双精度浮点型 | double | %lf |
字符串类型 | char | %s |
指针类型 | 没明确 | %p |
上表中的很多类型可能你么有听过,也不知道什么意思,没有关系,也不要担心,在后续的学习中,用到时候就会进行逐一的详解,在此处仅以打印整型为例,
我们首先新建一个.c
文件,名字的话你开心就好啦,保证后缀为.c
即可,然后引入头文件,定义主函数,今日是5月21日,那我们就打印整数521,代码如下:
#include
int main()
{
int a = 521;
int b = 1314;
printf("今天是 %d\n",a);
return 0;
}
下面我们简单分析以下上述代码,头文件,函数入口等大家相比早已了解,根据上述的表格,可以看到我们定义了两个整型int
变量,名为a、b
,然后对其进行打印,注意:打印的内容同要用""
引起,由于打印的类型为int
,由表可知应该使用%d
命令,其中的\n
为换行操作,你问为啥是换行?甲鱼的臀部—规定!!!!为什么后面该跟着一个a
呢,这个不是规定,这是为了告诉计算机我们要打印a
,而不是b
。
你可能又问了,最后一句retunrn 0
干嘛的?在主文件中我们定义的函数的起始执行入口,那么你总得有个出口吧,这个命令就是告诉电脑,程序到这就over
了。
讲解完毕后,ctrl + s
保存文件,F6
编译代码可以看到打印内容如下图所示:
如果我们在打印函数中不说明具体的打印变量
,会有什么结果呢,我们继续编译:
可以看到,由于并未指定打印谁,计算机就随便打印了,这不是瞎搞嘛,所以一定要声明具体的打印变量
。
上述操作是打印单个变量,如果我想要打印多个变量呢,难道我要printf*n
嘛,当然不是,只需要在打印函数中,说明具体的打印变量和打印类型即可进行多变量打印,将上述代码的打印函数改为:
printf("今天是 %d\n 我要 %d\n",a,b);
保存编译运行,可以看到结果如下:
同时将两个想要打印的内容,同时进行了打印,但是此处到注意位置对应,如果将a
与b
的位置互换,那么打印的内容也会互换,结果如下:
这可不行,毕竟我们没有第13个月,所以打印时要小心,注意打印变量位置的对应
。
所谓局部变量
,其作用域自然是局部的
,仅在局部有效(这么说其实是不对的,目前大家先这样理解),全局变量自然是在全局都可以进行使用,那么我们该如何区分自己定义的变量是全局变量 or
局部变量呢。
我们用该变量是否在{}
内进行区分,在花括号内则为局部变量,在外则为全局变量
,下面是示意代码:
#include
int main()
{
int a = 521;
{
int b = 1314;
}
printf("今天是 %d\n",a);
printf("我要 %d\n",b);
return 0;
}
此处定义的变量在{}
内,它是一个局部变量,因此我们在外部进行打印时,将会无法打印,提示未被定义,如下图:
将打印函数放入{}
内,即
#include
int main()
{
int a = 521;
{
int b = 1314;
printf("我要 %d\n",b);
}
printf("今天是 %d\n",a);
return 0;
}
可以看到可以正常打印,结果如下:
从上述的不同代码的运行中,我们可以看到变量b
只作用在了其所在的{}
内,在{}
外并未启作用,那么{}
内的区域即为变量b
的作用域,这也符合局部变量
的特点,那么a
的作用域是否就是全局呢,我们在b
所在的{}
内打印a
,注释外部打印a
的命令,即代码为:
#include
int main()
{
int a = 521;
{
int b = 1314;
printf("我要 %d\n",b);
printf("今天是 %d\n",a);
}
// printf("今天是 %d\n",a);
return 0;
}
保存编译结果如下:
可以看到可以正常打印,因此,a
的作用域确实为整个文件,也即作用域为全局。
既然有全局变量和局部变量,那么势必会造成一种冲突,如果我不小心,将两个 变量名命名为同一个a
了,那么最后编译时识别的到底是全局变量定义的a
,还是局部变量a
呢?下面进行验证,示例代码如下:
#include
int a = 521;
int main()
{
int a = 1314;
printf("今天是 %d\n",a);
return 0;
}
保存并编译,结果如下:
可以看到结果是1314而不是521,这也就意味着局部变量的优先级高于全局变量(当变量重名时)
。
所以在写程序时,一定要避免变量重名
,不然会很麻烦,他又不报错,你说怎么搞呢。
上述内容即使今天的全部内容了,水平尚浅,不足之处望大家海涵,如果方面,点个赞和关注呗,谢谢大家。
Ps:今天是5月21日,祝大家节日快乐!