首先声明,此博客不照搬抄袭,存在自己的见解,我所使用的编译器是VS2022

目录

1.C语⾔是什么?

2. 编译和链接

3. 源⽂件、头⽂件

4. 第⼀个C语⾔程序

5. main函数

6. printf和库函数

7. 一些常见关键字

8. 字符和ASCII编码

9. 字符串和\0

10. 转义字符

11. 语句和语句分类

12. 注释是什么?为什么写注释?


1. C语⾔是什么?

c语言就是一种计算机语言,用于给计算机下达指令,让计算机工作的,一种编译型语言,区别于python,python是解释型语言

2.编译和链接

C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。 C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个 过程。

1. 每个源⽂件(.c)单独经过编译器处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件)

2. 多个⽬标⽂件和库⽂件经过链接器处理⽣成对应的可执⾏程序(.exe⽂件)

所以.c文件要经过.c->.obj->.exe这三个路径,才能生成可执行程序

3. 源⽂件、头⽂件

c语言中,有.h为后缀的头文件和以.c为后缀的源文件

但是有.c文件不一定需要有.h文件

在vs2022中

  • .c 文件 = 代码实现(干活的)
  • .h 文件 = 声明 / 接口(打招呼的)

单纯有.c文件就能执行,.h是用来声明和做接口的,例如helloworld代码

.头文件在以后建立多个程序源文件的时候,可以直接引用头文件,让一个项目的一个源代码中可以找到其他源代码里所写的内容,进行一个链接

4. 第⼀个C语⾔程序

从此图可看出,这是一个简单的打印一串字符串的程序

下面读者提供此代码:

#include <stdio.h>
int main()
{
	printf("Hello World!");
	return 0;
}

5. main函数

main函数一个程序的入口,程序从main函数开始执行,且,一个项目里,只能有一个main函数入口,main函数前面的int对应着文件结尾的return 0;int表示此函数所要接受的返回值为为int类型,所以return后接0,代表返回了0这个int类型的值

我在写代码过程中见过的错误:

1.main()写成mian(),因为敲太快了,难免会有打错的时候

2.使用了中文符号,符号只能都是英文的

6. printf和库函数

printf函数是一个库函数

作用:在屏幕上输出打印所输入的内容

用法:在使用的过程中,必须加双引号,双引号内就是你所要打印的内容,如上图所示,其中的%d,%c,%lf为占位符,在输出的过程中,会被(,)后面的字符或者数字代替,使用printf函数,必须要有头文件#include <stdio.h>

那什么是库函数呢?

库函数就是提供给程序员便利的,也被称为标准库,可直接调用库函数去实现某些特定的功能,不需要自己再手动敲一遍很多功能,大大提升了程序员写代码的便利性

下面给出一些常见的占位符

最常用占位符(背这 6 个就够 90% 场景)

表格

占位符 作用 例子
%d 输出整数(int) printf("%d", 100);
%f 输出小数(float/double) printf("%f", 3.14);
%c 输出单个字符 printf("%c", 'A');
%s 输出字符串 printf("%s", "hello");
%lf 输入小数用(scanf) scanf("%lf", &num);
%% 输出一个百分号本身 printf("%%"); → 输出 %

7. 关键字介绍

1.关键字都有特殊的意义,是保留给C语⾔使⽤的

2.程序员⾃⼰在创建标识符的时候是不能和关键字重复的

3.关键字也是不能⾃⼰创建的。

下面是一些常见关键词:

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

注意!!!

define不是关键词,它是预处理指令

8. 字符和ASCII编码

字符:类似于‘a’,'\n','%'都是一个字符,计算机的数据都是由二进制数据储存的,我们在计算机中给每个字符都编排了一个二进制编码,我们叫他ascll编码,用ascll编码的值来代表这些字符,可以通过ascll编码的值来找到这些字符,所以字符的本质也是整型类型,因为字符在计算机上的存储本质上都是对应着的都是二进制数字编码

字符在c语言中要用‘  ’单引号括起来

下面给出ascll码表:

下面给出ascll要注意的几点:

1.字符A~Z的ASCII码值从65~90
2.字符a~z的ASCII码值从97~122

3.对应的⼤⼩写字符(a和A)的ASCII码值的差值是32

4.数字字符0~9的ASCII码值从48~57
5.换⾏ \n 的ASCII值是:10

6.在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察

9. 字符串和\0

字符串要用“  ”双引号括起来

例如“abcde”,"比特"等

字符串都以\0结尾,在c语言中字符串的末尾都会默认生成隐藏一个\0

例如上述图片所示,arr1这个数组存的字符是没有\0结尾的,而arr2的有

如图所示,而他们的结果却不相同,这是因为arr1中没有\0结尾,printf库函数在打印的时候找不到结尾的地方,所以就会打印出一堆烫烫烫烫烫的文字乱码

10. 转义字符

转义字符,顾名思义,就是转变字符原本的意思,例如‘n’,当加入 ‘\’之后变为‘\n’,其意思就变为了换行符,如下图演示

abncd就打印abncd,但当在n面前加一个\时,如下图演示:

变成了打印,ab换行再打印cd再换行,不再打印n

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

转义字符 全称 / ASCII 详细含义 & 效果
\n 换行 LF 光标移至下一行行首,实现文本换行
\t 水平制表 HT 光标跳到下一个制表位,相当于按 Tab 键,用于对齐排版
\b 退格 BS 光标向前回退一格,不删除内容,后续字符会覆盖原有字符
\r 回车 CR 光标回到当前行行首,不换行,后续字符从头覆盖
\0 空字符 NUL ASCII 0,字符串结束标志,C 语言字符串以它结尾
\\ 反斜杠 表示一个普通的反斜杠字符 \
\' 单引号 表示一个普通单引号 ',用于字符常量中
\" 双引号 表示一个普通双引号 ",用于字符串常量中
\a 响铃 BEL 使终端发出一声提示音(蜂鸣)
\f 换页 FF 打印机换页,终端上通常表现为换行
\v 垂直制表 VT 垂直方向跳格,终端上一般显示为换行


其中\v转义字符的效果如下:

打印完一个字符后直接沿垂直方向跳格换行


\r转义字符的效果如下:

本应该打印abcdcdef,中途加个\r让光标回到最前面并覆盖了原来的abcd开始 打印cdef


\b转义字符的效果如下:

如图所示\b的效果,光标回退一格,到了d前面,并覆盖了d继续向后打印


11. 语句和语句分类

语句在c语言中分为五大类语句,分别为:

1.空语句

空语句就是一个分号‘   ;’,语句里什么内容都没有,就被称之为空语句

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

2.表达式语句

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

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

3.函数调用语句

函数调用语句就是调用函数的有分号的语句

#include <stdio.h>
int Add(int x, int y)
{
 return x+y;
}
int main()
{
 printf("hehe\n");//库函数调⽤语句 
 int ret = Add(2, 3);//自定义函数调⽤语句  
 return 0;
}

4.复合语句

复合语句就是,一个大括号里还有其他大括号,其他大括号可以是一对也可以是很多对

int main()
{
 int i = 0;
 int arr[10] = {0};
 for(i=0; i<10; i++) //for循环的循环体的⼤括号中的就是复合语句 
   {
      arr[i] = 10-i;
      printf("%d\n", arr[i]);
   }
 return 0;
}

如上图,main函数大括号内还有个for循环有大括号,for循环内的语句就叫做复合语句,也被陈伟代码块

5.控制语句

控制语句是用于控制程序执行的顺序,在C语言中,支持三种顺序结构,分别为:

(顺序结构,选择结构,循环结构)

顺序结构:

顾名思义就是按照代码的顺序开始执行代码的程序,这个没什么特别的,就按照程序执行一步步往下执行就行

选择结构:

按照所给定的条件进行有选择性的执行代码程序

其中含有两种语句,条件判断语句,也叫分⽀语句:if语句、switch语句

循环结构:

循环结构为在代码中可能在某些条件下一步步循环执行某一段代码,直到条件不成立为止

其中包含七种语句:

循环执⾏语句:do while语句、while语句、for语句

转向语句:break语句、goto语句、continue语句、return语句。

后期再一个个探讨

12. 注释是什么?为什么写注释?

注释就是用于方便程序员自己理解自己写的代码和别人写的复杂代码的,很有必要要写,因为在以后的工作中,写代码程序不可能全部由一个人完成,而是分工或者接管,此时看到别人的代码,或者别人拿到你的复杂代码一时间看不懂,此时注释就起了很大作用

注释并不会进入代码中,影响代码的实现,在执行代码程序的过程中,注释会被编译器自动变成一个空格,例如(min/* 这⾥是注释*/Value )会变成(min Value)

注释有两种写法:

第一种//:

代码中绿色的双斜杠即代表注释掉这行代码(推荐用这种注释方法)

第二种/* */:

用/*为注释开头,并用*/用于注释结尾,但这种注释有局限性,不能嵌套注释:

例如上图,一个/*只能对应离它最近的*/,无法多层嵌套注释

补充:if语句也是,if语句可以嵌套,但是一个else语句对应的也只能是离他最近的if语句,除非使用大括号区分开,不然默认对应最近的语句

例如此处,什么都没有打印,常见错误是认为,条件if(a<5)中a既然不小于5,那就执行下面的else语句,打印hehe,但其实此时else语句对应的并不是if(a<5)这个if语句,而是对应的离它最近的if(b>10)这个语句,然后因为a不小于5,所以根本不会进入判断if(b>10)这个语句,所以什么都不打印

接下来我们来看使用大括号之后的效果,把代码要表达的意思区分清楚:

里面的if被大括号括起来了,此时的else才对应着上面的if(a<5)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐