C语言在学习编程的作用并简单了解一下C语言
Posted 小奔同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言在学习编程的作用并简单了解一下C语言相关的知识,希望对你有一定的参考价值。
🌟接下来就让小奔来带着大家简单的了解一下C语言,不过看起来挺多的,哈哈哈,写了大概八十个小时吧,不过小奔是在20几天前才开始学的哦,这里只是简单带着大家对C语言有一个轮廓的认识,小奔会持续更新的
入门第一个语言——C语言
目录
🎩0. 看前须知
🌟对于我们这些才步入编程界的小生来说,有一个方向尤为重要,但是无论选择哪个方向,有一门计算机语言是我们都要去学习的,这门计算机语言就是C语言
🌟为什么说C语言是我们都要学习的呢?
🌟我问过鹏哥,如果你想入手编程的话,而且也是一门比较经典的语言,以这门语言作为编程入门的语言是比较合适的
🌟C语言在编程领域的用途的话,一个C++开发工程师他必然要懂C语言对吧,因为C语言和C++本质上是不分家的,在学完C之后,再延伸往后学习C++,这个时候就可以做C++开发工程师对吧,如果你学了C之后,要走Linux方向,那这个时候呢可以做Linux C的一个开发,甚至可以做底层的驱动开发,都是没有任何问题的,或者做一些嵌入式开发,驱动开发,包括系统开发都是需要C ,Linux这一套的
🌟接下来,学完C语言之后,对于其他编程语言的学习也更加容易一些,因为C语言简单对吧,容易上手,而且它是一门偏底层的计算机语言,它让你更加了解内存底层的一些原理之类的,学完之后,你再学习其他计算机语言都会变得非常容易,得心应手
💗1. 学C语言前期的准备
💗1.1 建议
1.喜欢分享
要习惯去分享,可以向我一样写博客,就是要去把自己的观点分享出来,不能闭门造车,善于分享的人对以后的工作有非常的优势。(找工作的时候,哎,把自己的博客链接一贴,面试官看了就能知道你是一个喜欢分享的人,会有很好的印象。)
2.要去实践,去刷题
学习编程必须去实践,去刷题,我推荐一些网站,可能还有不知道的其他很不错的刷题网站,我了解后会补充在这里。
链接:
牛客网
3.建立一个自己的仓库
学编程要建立一个自己的仓库,我听过程序猿敲过的代码,它能运行就行,你稍微一改,可能就改了一个数,就运行不了,但是你可能就会忘记改的哪里,或者电脑死机,你写的代码就在里面,取不出来,这时候如果有一个仓库储存着这些代码,需要的时候重新把这个代码从仓库里拿出来,就不会怕上面这种情况。
我使用的是gitee,这个跟博客有一个相同的作用,就是面试的好工具,大公司都喜欢这个,里面还有一个贡献度,
你每上传一次代码,上面都会有记录,你这天上传的次数越多,绿点就会越深,而且也可以点击这个绿点来查看这一天所上传的代码,在面试的时候非常有帮助。所需要的软件都存在百度网盘的,就在最下面链接中。
💗1.2 安装相关的软件
1.如何安装编译器呢?
快看鹏哥的视频
(吹爆他,太强了)
2.如何使用
gitee
呢?
还是看鹏哥的视频
(鹏哥是真的强)
🎻2. 什么是C语言
c语言是一门计算机语言(比如c++/java/python…),常用于底层开发,跟人类交流的语言类似,它是人与计算机交流的语言。
计算机语言的发展:低级–>高级
发展到C语言时,已经是高级语言了
语言形式 例:
二进制的指令 1001010
汇编语言 ADD
C语言的国际标准:ANSI C(常用的是C89,C90还包括C99,C11…)
编译C语言的编译器主要有
MSVC
(作者目前使用),GCC,Clang,WIN-TC,Turbo C等
C/C++是编译型的语言,要把源代码(
test.c
), 编译为程序(test.exe
), 需要4个过程(下面四个过程)
初步了解编译器运行过程:
我们都知道计算机使用的是
二进制
语言,我们生活在十进制的世界,
二进制就例如10010101
,逢二进一;
八进制就例如157643235
,逢八进一;
十进制就例如95124921
,逢十进一;
十六进制就例如A5B46
,逢十六进一。(A指10,B指11,依次类推)
二进制 八进制 十进制 十六进制
1 1 1 1
10 2 2 2
111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1101 15 15 E
1110 16 16 10
1011001011 1313 715 2CB
那么计算机为什么要使用
二进制
语言而不去使用八进制
,十进制
,甚至十六进制
的语言呢,这是物理方面的原因,只有二进制
比较好实现,
灯亮则是1
灯灭则是0
从物理方面好实现,其他的进制都不太好实现,这里就先简单了解一下
📓3. 第一个c语言程序
我们在敲出第一个C语言程序前先思考一下,为什么要写代码?
当然是为了解决生活中的问题(比如购物、点餐、看电影等)
📓1.打开VS
跳转到目录末尾
📓2.创建新建项目
跳转到目录末尾
📓3.选择空项目
跳转到目录末尾
📓4.输入项目名称并创建
跳转到目录末尾
我这里推荐把项目名称改为当天的日期,存放在一个统一的位置,方便自己查找,也方便自己把代码上传仓库
📓5.创建源文件
跳转到目录末尾
在解决方案资源管理器那里的源文件右击,就可以弹出来那些选项(如果一不小心把解决方案资源管理器关了,不要关掉整个软件,你可以点最上面的视图,再点击解决方案资源管理器就可以了)
注意:记得把名称的后缀.cpp
改为.c
C的语法和C++的语法是有所差别的
.cpp后缀 编译器会按照C++的语法来编译代码
.c后缀 编译器会按照C的语法来编译代码
我们目前使用的是C语言,在后面的C++学习篇中再来使用
.cpp
后缀
📓6.写代码
跳转到目录末尾
//
这个是写注释的,即把这一横行的代码无效化
vs2019环境如何运行代码:
运行按键ctrl+f5
或fn+ctrl+f5
#include<stdio.h>
//c语言代码中一定要有main函数
//也就是主函数
//printf是一个库函数,是专门用于打印数据的
//标准的main(主)函数写法
int main()
printf("Hello world!");
return 0;
//古老的写法-不推荐
//void main()
//
//
//
运行的结果:
打印了一个
Hello world!
📓解释:
跳转到目录末尾
1.
#include<stdio.h>
是在程序编译之前要处理的内容,称为编译预处理命令(还记得上一个博客里面编译器运行的四个过程吗,第一个过程就是预处理)
std—指标准(standard)
i—指输入(input)
o—指输出(output)
2.
int main() return 0;
是C语言main函数(也叫主函数)的一种声明方式(我目前写的简单的代码都要套用这个模板,还不清楚的看之后发的博客所示代码就能明白),这里的int
是数据类型(下一个博客会讲)里面的整型(比如6,48,99
等的整数),int
对应后面的是return 0
;
return 0
即返回值为0
,因为int
是整型,所以要求返回值也符合int
,这个0
也可以是其他数,但我们俗称规定的就是0
,就不要搞特殊写4
,5
什么其他的数字了。
3.
printf(" ");
库函数,专门用来打印数据的,c语言提供这个库函数,是不是你的?当然不是,它是别人给你的,所以你要用的时候需要打个招呼,这个头文件#include<stdio.h>
就是用来打招呼的,说我要用这个printf
这个库函数
🔭4.数据类型
之前说过写代码是为了解决生活中的问题,比如购物。
假设我们要买一本书,它的价格是
10.5
,是个小数,也可以是一个整数10
,它的书名是钢铁是怎样炼成的,是一组字符串,就像svli@gikvw
这些,里面每个称为字符。
我们要去用c语言来去存储这些信息呢,在c语言里面为了能够描述这些类型。
就把小数抽象出来一个数据类型,叫浮点型
把整数抽象出来一个数据类型,叫整型(就是上面的
int
)
把字符抽象出来一个数据类型,就叫字符
10.5 - 小数 - 浮点型
10 - 整数 - 整型
A - 字符 - 字符
那么c语言里面抽象出来哪些数据类型呢?
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
//浮点型 10.5
//整型 10
//字符 A
看了上面的数据类型,很容易看出来下面的关系:
为什么叫浮点数?
就像66.6
和6.66*10
,小数点是可以浮动的,所以叫浮点数
那么,为什么会有上面这么多的类型呢?我们就需要先回答一下下面这个问题:
每一种类型的大小是多少?
我们等一下用代码问一下他们各自的大小
先了解一下新的东西
#include<stdio.h>
int main()
printf("%d\\n",100)//
return 0;
这个
%d
指的是打印(输出)的格式,即整型,后面的100
是返回值,即打印的是100
,\\n
的意思就像enter
,空行的意思,如图:
运行结果:
100
现在来解释一下\\n的作用,这里用两组代码来对比一下:
第一组
#include<stdio.h>
int main()
printf("%d\\n",100)//
printf("%d\\n",100)
printf("%d\\n",100)
return 0;
运行的结果:
100
100
100
第二组
#include<stdio.h>
int main()
printf("%d",100)//
printf("%d",100)
printf("%d",100)
return 0;
运行的结果:
100100100
可以看出,\\n的作用就是空一行,就是平时enter的作用
接下来就是
#include<stdio.h>
int main()
printf("%d ", sizeof(char));
printf("%d ", sizeof(short));
printf("%d ", sizeof(int));
printf("%d ", sizeof(long));
printf("%d ", sizeof(long long));
printf("%d ", sizeof(C语言变量应该怎样使用,你真的了解了吗!
作为嵌入式开发工程师,C语言应该是大家学习的第一门编程语言,也是用到最多的一门语言,但是你对C语言
真的很了解了吗,今天和大家一起讨论一下C语言中的变量应该怎样使用。
C语言变量主要分为全局变量和局部变量,全局变量申请以后可以被程序里所有源文件的函数访问使用。局部变量为函数独有,只在创建此局部变量的函数内部可以访问使用。由于局部变量作用范围小,函数返回时即释放,只用于实现函数功能,所以一般不会出太大BUG,即使出现BUG直接定位到函数进行调试分析即可解决问题。但是全局变量可能在多个源文件里的多个函数中被使用,这就导致一旦全局变量出现问题就要对很多函数做修改,给程序的维护带来很多麻烦。针对于全局变量我们来细说一下它的优缺点:
优点1、全局可见,任何一个函数或线程都可以读写全局变量,同步操作简单,便于程序开发者前期开发调试,适合个人独立开发的小规模项目。
优点2、内存地址固定,不需要像局部变量那样从栈中申请释放,读写效率比较高。这就涉及C语言的编译原理了,可以结合C到汇编来深入理解这句话。
缺点1、全局变量存放在静态存储区,系统需要为其分配内存,一直到程序结束,才会释放内存,这一点就局部变量的动态分配,随用随从栈中申请,用完(函数调用完毕)就释放。这一问题导致内存空间资源浪费,可以通过堆动态申请释放变量来优化此问题。
缺点2、影响函数的封装性能,我们肯定是希望我们写的函数具有重入性,就如一个黑盒子一般,只通过函数参数就能得到返回,内部实现要独立,但是如果函数中使用了全局变量,这势必就破坏了函数的封装性,会造成对全局变量的依赖。
缺点3、降低函数的移值性,原因同上。
缺点4、降低代码的可读性,这也意味着系统维护会不方便,因为一个全局变量可能会出现程序中的各个环节,函数的执行也会根据环境变化而变化,所以调试会不太方便。
缺点5、全局变量的读写,可能会延迟,这主要是体现在“写”操作上,由于写操作,一般需要2个周期操作,所以有可能会出现,这边没写完时,那边已经读了,结果读到的不是最终值,这个是一个概率事件,概率很小,但是并不代表没有。此问题多发生在多线程框架程序以及中断里使用全局变量。所以突发性的代码里尽量避免使用全局变量,即使使用也需要考虑全局变量的重入互斥问题。
上面的说的缺点,可能有些人会觉得有些矫情,或者概率很小,这个要分情况讨论的,如果对于一个非常简单的程序来说,代码量少,功能也少,那全局变量无疑是最适合的同步方式。但是对于代码量大,功能有多,逻辑又复杂的系统来讲,“稳定”来源于方方面面,其中就需要严谨和方便维护,所以不适用全局变量能够大大的避免出bug,方便后期维护,这个时候就需要考虑下,尽量少用全局变量,替代全局变量的方式有很多,最简单易用的就是信号量或者消息队列。这个在裸机程序里也很好实现,而在操作系统中,就更方便了,因为一般操作系统 都会提供信号量功能,可以直接使用。
如果开发的程序项目不特别强调执行效率可以将必须要申请的全局变量通过函数封装起来,以形参传递到函数内对全局变量进行写操作,以函数返回值的形式读取全局变量,以此来供其他源文件访问该全局变量的函数接口,尽量减小全局变量的直接出现作用范围。
以上是关于C语言在学习编程的作用并简单了解一下C语言的主要内容,如果未能解决你的问题,请参考以下文章