C语言入门简介(一)

什么是C语言之C语言简介

C语言是人与计算机交流的一门高级编程语言(更接近自然语言,如英语),人们用它给计算机下达指令以完成工作。

编程语言发展的大致阶段

编程语言发展大致经过三个阶段,起初人们用机械语言(即由0和1组成的二进制代码)对计算机交流。机械语言能直接被计算机所识别,但对使用者掌握计算机原理的知识与素养的要求很高,不利与计算机技术的推广,同时大量重复的0和1代码,和反复枯燥的运算操作极大的影响了使用计算机工作的效率,极大的影响了使用计算机从事创造性工作,同时差错也容易出现。

机械语言简单版:“不是人看的”。

于是出现了汇编语言。汇编语言用助记符代替了机器指令的操作码,用地址符号代替操作数的地址,用简单的逻辑大大提高机械语言的效率,但并没有改变机械语言的特性,没有从根本上解决问题。同时汇编语言对硬件的依赖,不同的硬件相应的也会有不同标准,多用于底层开发,如电子电路,单片机,硬件驱动等。

汇编简单版:虽然方便很多,但“不是人看的”的特性没有改变。

汇编语言只是提高了效率,但并没根本改变机械语言的特性,所以汇编语言仍然对使用者的素养提了很大要求。于是有没有一种效率更高,更接近我们平时使用的自然语言呢(例如英语,中文)?有,高级编程语言孕育而生,C语言就是一种高级编程语言。计算机并不能直接识别高级语言,需要借助编译器

高级语言简单版:“是人看的”,但计算机看不懂了,需要翻译给计算机看

现在已知计算机语言有上千种,C语言也是其中之一,其它的c++,java,go,python也是计算机语言。

C语言的诞生

C语言最初是两位大神为开发Unix系统(操作系统的祖宗之一,现在苹果的mac,linux,Linux分支安卓多少与它有点渊源,具体故事可搜索,这里不展开说操作系统的发展史)而开发的。

集成开发环境

高级编程不能直接被计算机所识别,需要通过很多步骤,其中最重要的是编译器编译链接器链接,生成可执行文件,计算机才会去运行。然而对于初学者,以上这些操作的复杂大大提高了学习的困难性。对于工作者而言,大大降低了工作效率。

那有没有一种工具,集中了以上步骤,使得开发者或者学习者获得极大的便利,只需写写代码,动动小手就能运行呢?有,集成开发环境就此诞生。

集成开发环境有很多种,不同厂商提供不同的开发环境和编译器,但都遵循标准委员会的标准。下面介绍一些主流的开发环境和集成的编译器。

• VS2022 集成了MSVC(安装报包较大⼀些,安装简单,无需多余配置,使用方便)

• XCode 集成了clang(苹果电脑上的开发⼯具,使用方便)Xcode 15 - Apple Developer

• CodeBlocks 集成了gcc(这个工具较小众,需要配置环境,不太推荐)Code::Blocks - Code::Blocks

• DevC++ 集成了gcc(小巧,但是工具过于简单,对于代码风格的养成不好,⼀些竞赛使用)

Dev-C++ download | SourceForge.net

• Clion 是默认使用CMake,编译器是可以配置的(工具是收费,所以暂时不推荐⼤家使⽤)

CLion: A Cross-Platform IDE for C and C++ by JetBrains

推荐安装 VS2022 的社区版本学习,免费,使⽤⽅便,⼯作中常见。作者接下来学习也用它。

Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com)

vscode,本质上是个编辑器(可以下载插件来编译不同的语言),是个不错的工具,简洁,功能多,开发自由度大,很多需要自己选择配置,上手难度比较大。推荐成为大佬或有一定基础的开发者使用,初学者也可以用,但需要花费额外的时间成本来学习如何调试它,不能愉快地敲代码运行。这个工具在vs2022的官网可以找到。

VS2022的优缺点

优点

vs2022是一个主流的集成开发环境,企业中使用比较普遍。

vs2022编辑器,编译器,调试器,功能强大。

直接安装就可使用,上手容易。

界面是中文

缺点

安装包大,占用空间多,功能丰富,(有时不知用不用的上也要下载,虽然可以取消大部份功能,但随随便便二十几G,有时候是三十几G,可能一些功能会更新,作者电脑内存大,根本不慌,只是作者曾反复安装几次,每一次同样的功能占的内存都不一样)。

从写代码到运行的过程

C语言是一门编译形语言,程序员平时敲的代码叫源代码,源代码保存在源文件中,一个项目有多个源代码,而源文件属于文本文件,文本文件本身无法被执行,必须通过编译器的编译和链接器的链接,生成二进制的可执行文件,可执行文件才能被执行

C语言的源文件后缀是.c,c++的是.cpp 

vs的界面,鼠标右键点添加,就可以写代码了

注:

1.每个源文件.c单独经过编译器处理生成对应的目标文件 .obj为后缀的文件

2.多目标文件和库文件经过链接器处理生成对应的可执行程序程序.exe文件

第一个C语言程序

基本的内容已经简单介绍完了,下面就让我们开始第一个C语言程序吧。

点击添加源文件

敲代码。结束~~

其实就那么简单。

虽然代码简单,但还是有点知识点在里面的。

预处理与头文件

#include<stdio.h>

这是一条预处理指令,让编译器对这条代码做预处理即编译到运行所要的准备工作,可以理解为登台表演前的排练和演习。

该工作包含头文件stdio.h,头文件与下面实现打印功能的库函数相对应,使用对应的库函数必须包含对应的头文件。也可以理解为是声明,不声明,编译器就不知道printf是干什么的,预处理也不会提供对应处理库函数的准备,那么代码就无法识别。

stdio.h是C编译器软件包的一部份,它为键盘输入与屏幕输出提供支持。

main函数与return 0

int main()

main函数是程序或者说是代码或者是函数的入口,一切程序和代码及程序以及实现功能的函数都是从这里开始执行。

程序执行完了,return 就会向main函数返回一个值,return 0表示程序运行结束。其实只要不涉及用return (return能返回的不只是零,等写到对应的知识时会讲)返回值来实现某个功能,大多数时候不返回程序也能运行。但这样写(return 0)是一种规范或者将其看作是一种标准的风格。

int main()中int是整形关键字,表明变量的类型是整形,这里表示main函数的返回值是整数。

(main函数的类型与程序内运行的变量类型无关,程序内可以根据需求用字符型或浮点型,只与return后面的值有关,也许说的不太对,初学者也许会混淆,例如main函数是整型并不影响我在程序里创建一个其它类型的值来运算。)

main函数还有其它写法,除int main外,还有void main(),void(英语,无效的 空的)表明main的类型是空的类型即无类型。还有int main(void),括号中的void表示main这个函数或者说变量无任何值,它只是一个入口。

int main()

void main()

int main(void)

写法都正确。

main函数的注意事项

一个程序中,作为程序的入口,有且仅有一个main函数。(很好理解,如果有多个main函数,那么我该从哪里开始执行呢,很合理,对吧)

main函数的位置不固定,写那都行,但只能有一个。

即使一个项目中有多个。.c文件,但是只能有一个main函数。

库函数

printf("Hello world");

补充:scanf 可以获取用户的输入。

什么是库函数?

为了提高效率,避免程序员重复造轮子来实现一些常用的功能,统一标准,标准协会收集了平时大部份常用的功能,提供了一套函数(库函数),用来实现这些功能,使得程序员不必再写代码(造轮子)来实现这些功能(比如打印,输入;求一个数的n次方运算等等一些数学运算;等等),大大提高了效率。库函数诞生:C语言标准规定了一组函数,这些函数再由不同厂商的编译器实现,这些函数组成了一个函数库,称为标准库,这些函数也被称为库函数,使用库函数必须声明对应的头文件。在这个标准库的基础上,一些编译器厂商可能会额外扩展一些功能,提供额外的函数,这些函数其他编译器不一定支持。

库函数比较多,以后用到会介绍。

了解可参考:cplusplus.com/reference/clibrary/

第一个程序的知识点基本结束了,为了使简介更完整,在补充一些别的知识点。

关键字

C语言中保留了一批符号(单词),用来书写代码,以实现需求,而这些保留的符号被称为关键字。

每个关键字都用自己的功能和意义,并且不能用来创建标识符(比如命名变量)。

关键字是规定好的,不能随意创建。

一些关键字

auto  break  case  char  const  continue  default  do  double  else  enum  float for goto if int long register return short signed sizeof struct switch typedef union unsigned void volatile while

注:在C99标准中加⼊了 inline 、 restrict 、 _Bool 、 _Complex 、 _Imaginary 等关键 字。 ⼀些关键字⼤家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。

注:C 关键词 - cppreference.com(C语⾔关键字的全部介绍)

字符

什么是字符?

在键盘中可以敲出各种字符,如:a,b,c@,#等等,这些被称为字符。而C语言中字符是用括号括起来的,如'a','b','@'

什么是字符串?

顾名思义,字符串是由字字符组成的串,如"abcd","Hello world",使用双引号括起来。

补充C语言字符串中一个知识,就是在字符串末尾隐藏者一个作用为结束\0的字符,是字符串的结束标志,如"Hello world"实际是这样子的”Hello world\0"

但如果打印的是字符的话,没有\0呢,敲个代码玩玩

这代码我们可以看到,arr1与arr3对比,arr1没有结束字符\0,所以打印没有停止,那计算机怎么办呢,它会生成一些随机值或者乱码,在屏幕上就如arr1所示。

arr2和arr4是正常的,因为arr2是使用字符串常量初始化的。数组中有\0作为结束标志,所以有没有都没影响,打印可以正常停止。

如果这样子,"abc\0ef",那么只会打印”adc"。

字符与ASCLL编码

计算机只能储存二进制数字,而字符可以通过转换成二进制数字储存在计算机里,ASCLL编码就是用来将字符转换成二进制,十进制,十六进制的,该ASCLL编码由美国国家标准学会出台,为了方便通信,不造成混乱。C语言的字符就遵循ASLL编码的方式。

ASCII 码表 - cppreference.com

• 字符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个字符是不可打印字符,无法打印在屏幕上观察

弄个代码观察一下

随便打印一个字符试试

打印整个表能打印的字符试试

转义字符

上面的代码你也许会看到\n,\0,这是什么?其实这就是转义字符,顾名思义:转变原来的意思的字符。

比如printf("adcdef");打印结果是adcdef。

如果加上换行符\n,比如("acdc\ndef);打印的结果是

acdc

ndef。

这样我们就看到与原代码截然不同的结果。

这就是转义字符的问题, \n 是⼀个转义字符表示换行的意思,我们可以简单的理解为 \ 让 n 的意思 发生了转变, n 本来是⼀个普通的字符,被 \ 转义为换行的意思。

C语言中像这样的转义字符还有⼀些,具体如下:

• \? :在书写连续多个问号时使⽤,防止他们被解析成三字⺟词,在新的编译器上没法验证了。

• \' :用于表示字符常量'

• \" :用于表示⼀个字符串内部的双引号

• \\ :用于表示⼀个反斜杠,防止它被解释为⼀个转义序列符。

• \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。

• \b :退格键,光标回退⼀个字符,但不删除字符。

• \f :换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于 \v 。

• \n :换行符。

• \r :回车符,光标移到同一行的开头。

• \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。

• \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下一行的同⼀列。

下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式

• \ddd :d d d表示1~3个八进制的数字。 如: \130 表示字符X

• \xdd :d d表示2个十六进制数字。 如: \x30 表示字符0

\0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,用于字符串的结束标志,

转义序列 - cppreference.com

语句及分类

空语句

#include<stdio.h>
int main()
{
   ;//空语句
   return 0;
} 

一个分号就是一个空语句

表达式语句

#include<stdio.h>
int main()
{
   int a=2;
    int b=0;
  b=a+5;表达式语句

}

表达式后面加上分号就是表达式语句

函数调用语句

#include<stdio.h>

int Add(int x,int y)
{
   return x+y;
}

int main()
{
  int a=0;
   int b=0;
 scanf("%d    %d",&a,b);//函数调用语句
  int sum=Add(a,b);//函数调用语句
 printf("%d",sum);//函数调用语句
  
return 0;
 
}

函数调用的时候,也会加上分号,就是函数调用语句。

复合语句

比如上文出现的代码,图中for循环中的代码块,成对括号中的代码就构成一个代码块,也被称为复合语句。

控制语句

控制语句用于控制程序的执行流程,以实现各种结构方式(C语言支持三种结构:顺序结构,选择结构,循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。

分为三类

条件判断控语句:if语句,switch语句;

循环执行语句: do while语句,while语句,for语句;

转向语句:break语句 ,goto语句,continue语句,return语句;

知识点太多了,下次更新再写,好累!

注释

最后再讲讲注释吧。

注释是对代码的说明,不仅是给自己看,也是在给团队的合作者看。好的注释更能体现程序员的高水平,反应程序作者的素质。注释要是必要的,但也不必过度注释。

注释的两种形式

第一种

/*内容*/

/*

注释

*/

将注释放在/*.........*/之中

这种注释可以插入行内

for(i=32/*前32字符不能打印*/;i<127;i++);

上面示例对变量进行了说明,在合作中,让协作者弄清你写代码的思路很重要,跟在它后面的代码依然会有效执行。

/*开始注释,*/结束注释。

第二种

//,c99标准中添加的,这种注释只能单行,可以放行首或行尾。

注释会被替换

编译时,注释会被替换成一个空格,所以ex/*注释*/plan/*注释*/atory会变成 ex  plan atory,而不是explanatory。

浅谈C语言标准

C99语言标准委员会94年更新的标准版本,最新的版本c11,市场上支持c89/90,支持大部分的c99。并非所有的编译器都完全实现c99的改动。市场更喜欢成熟和用的上的标准,c11比较少,标准委员会认为不应该要求小型服务机供应商支持其在目标环境用不到的特性。修订标准的原因:需要跟进新技术。而新技术并不会这么快的被市场需要,它也许还在实验室里;也许已经成熟;但市场时机和需求还未来临;也许运用范围还不广;但不能没有新技术。例如新标准添加了可选项支持当前使用多处理器的计算机。

结束

水平有限,作者的一些观点还请指教,另外,该文是学习笔记加实践和总结的扩展,集合了一些资料和其中作者阅读时提炼的观点,冒犯之处还请海涵。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清宁长欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值