初学C语言:对于C语言常见概念的认识

文章目录

1.C语言是什么?

人们通过Java/Python/Go/C++等计算机语言与计算机交流,写程序,给计算机发出指令,从而让计算机进行相应的工作。C语言就是计算机语言中的一员,是人与计算机交流的语言。

2.C语言的历史与辉煌

(1)发明B语言

1969年,贝尔实验室的肯·汤普森与丹尼斯·里奇一起开发了Unix操作系统。Unix是用汇编语言写的,为了移植到其他计算机,汤普森就在BCPL语言的基础上发明了B语言。

(2)发明C语言

1972年,丹尼斯·里奇和布莱恩·柯林汉又在B语言的基础上重新设计了一种新语言,这种新语言取代了B语音,所以称为C语言。

(3)Unix系统使用C语音重写

1973年, 整个Unix系统都使用C语言重写,此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。

(4)C语言的标准化

1988年,美国国家标准协会ANSI正式将C语言标准化,标志着C语言开始稳定和规范化。

(5)至今

一直到今天,C语言还在广泛的使用,在计算机语言的排行榜上霸占前三名。

3.C语言的编译与链接

C语言是一门编译型语言,而通过编译型语言所做出来的源代码(这些源代码也被叫做文本文件)是无法被电脑直接识别的,本身无法执行,必需经过编译器的编译和链接器的链接生成二进制的可执行文件,可执行文件才能够执行(因为电脑所识别的是二进制)。

eg:test.c(文本文件)---->编译器处理(其中包含了编译与链接)---->test.exe(可执行程序)

4.C语言中的头文件与源文件

在C语言中,xxxx.h的文件被称呼为头文件,xxxx.c的文件被称为源文件

xxxx.h-------header 头文件
xxxx.c-------源文件

5.第一个C语言程序

#include <stdio.h>

int main()
{
    printf("hehe\n");
    return 0;
}

6.main函数

main函数是C语言程序入口,每个C语言程序无论有多少行代码,都是从main函数开始执行的,所以main函数也被叫做:主函数
注意:
1.main是程序的入口
2.main有且仅有一个
3.无论一个项目中有多少个.c文件,都只能有一个main函数

注意:代码中不能使用中文符号!!!

7printf和库函数

(1)printf

printf是一个库函数,它的功能是在标准输出设备(一般指屏幕)上进行信息的打印。上面的代码是使用printf函数打印字符串。
(printf----print打印----format格式----->打印格式)
注:printf函数也可以用来打印其他类型的数据,eg:

#include <stdio.h>

int main()
{
    printf("%c\n",'w');//打印字符
    printf("%d\n",100);//打印整形
    printf("%f\n,3.5");//打印浮点数
    return 0;
}

(2)什么是库函数呢?

为了不再重复实现常见代码,让程序员提升开发效率,C语言标准规定了一组函数,这些函数在由不同的编译器厂商根据标准进行实现,提供给程序员进行使用。这些函数组成的一个函数库被称为标准库,这些函数也被称为库函数。
(简单来说就是C语言标准会统一规范各类常用函数的功能、参数及返回值,这些由标准规定、预先实现并封装在标准库中的函数,被称为C语言库函数。)

注意:在使用库函数时必须包含对应的头文件,eg:printf函数需要包含的就是stdio.h这个头文件。
std--------standard-----标准
i-----------input-----------输入
o----------output---------输出
stdio------>标准输入输出头文件
可参考: link

8.关键字(保留字),标识符

8.1 关于关键字的基础认识

C语言中有一批保留了名字的符号,例如:int、if、return,这些符号被称为保留字或者关键字。
注意:
1.关键字都有特殊的意义,是保留给C语言使用的。
2.程序员自己在创建标识符的时候是不能和关键字重复的。
3.关键字也是不能自己创建的。
可参考:link

8.2 对于标识符的基础认识

标识符有系统定义,也有我们自定义的。
在我们自定义时要遵守标识符的命名规则
规则如下:
(1)变量名可以包含字母,数字和下划线。
(2)变量名的第一个字符必须是字母或下划线,不能是数字。
(3)变量名是严格区分大小写的。
(4)不能有空格和特殊字符
(5)不能有C语言的关键字。

9.字符和ASCII编码

(1)字符

在键盘上可以敲出各种符号,这些符号都被称为字符。 eg:a,#,@等
注意:C语言中的字符是用单引号括起来的。eg:‘a’,‘@’,‘#’

(2)ASCII编码

我们知道在计算机中所有的数据都是以二进制的形式储存的,那这些字符在内存中分别以什么样的二进制储存的呢?如果我们每个人自己给这些字符中的每一个字符变一个二进制序列,这个叫做编码,为了方便大家相互通鉴,不造成混乱,后来美国国家标准协会ANSI出台了一个标准的ASCII编码,C语言中的字符就遵循了ASCII编码的方式,所以,我们可以在C语言编码的过程中采用相应的ASCII编码表格中的值来代表相应的符号进行编码
eg:

#include <stdio.h>

int main()
{
    printf("%c\n",'A');
    printf("%c\n",65);
    return 0;
}

参考link
注意:ASCII码表中的常见值
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.0到31是不可打印字符

10.字符串和\0

(1)字符串

在C语言中使用双引号括起来的一串字符就被称为字符串。 eg:"abcdef"就是一个字符串,字符串的打印格式可以用%s来指定,也可以直接打印。如下:

#include <stdio.h>

int main()
{
    printf("%s\n","abcdef");
    printf("abcdef");
    return 0;
}

(2)\0

\0是字符串的结束标志。
在上述的字符串"abzdef"中,我们实际上看到了6个字符 :‘‘a、b、c、d、e、f’’,但是实际上末尾还隐藏着一个\0的转移字符,由于\0是字符串的结束标志,所以我们在使用库函数printf()打印字符串或者strlen()计算字符串长度的时候遇到\0就自动停止了。
strlen()不计算""和\0
补:一个文件的结尾。

11.转义字符

转义字符--------->转变字符原本的意义

(1)\?:在书写连续多个问号时使用,防止它们被解析成三字母词,在新的编译器上没法验证了。

解释:在一些旧的编译器中会将??X(X表示任意一个符号)给解析成] 即:??X--------> ]
这会产生一些问题,例如:当我们打出printf(“(are you ok??)”)时,屏幕上所呈现出来的是(are you ok],此时就要用printf(“((are you ok\?\?)”)了。

(2):\':用于表示字符常量

解释:当我们打出printf(“%c\n”,‘’')时无法在屏幕上呈现出’这个字符且报错,因为编译器将前面两个’给识别了。解决时要用\'

#include <stdio.h>

int main()
{
    printf("%c\n",'\'');
    return 0;
}

(3)\":用于表示一个字符串内部的双引号

解释:当我们打出printf(“%s\n”,“”")时无法在屏幕上呈现出"这个字符且报错,因为编译器将前面两个"给识别了。解决时要用\"

#include <stdio.h>

int main()
{
    printf("%s\n","\"");
    return 0;
}

(4)\\:用于表示一个反斜杠,防止它被解释为一个转义序列符

#include <stdio.h>

int main()
{
    printf("abcd\nef");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("abcd\\nef");
    return 0;
}

注意:常用,尤其是在写路径时采用

(5)\a:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生

eg:

#include <stdio.h>

int main()
{
    printf("\a");
    return 0;
}

(6)\b:退格键,光标回退一个字符,但不删除字符

#include <stdio.h>

int main()
{
    printf("abcdef");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("abcdef\booo");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("abc\bdef");
    return 0;
}

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

解释:基本不用

(8)\n:换行符

#include <stdio.h>

int main()
{
    printf("abcdnef");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("abcd\nef");
    return 0;
}

(9)\r:回车符,光标移到同一行的开头

解释:与```\b``非常相似`

#include <stdio.h>

int main()
{
    printf("abcdef");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("abcdef\rooo");
    return 0;
}

(10)\t:制表符,光标移到下一个水平制表位通常是下一个8的倍数

解释:作用相当于tab

#include <stdio.h>

int main()
{
    printf("ab\tcde\tfjhl\t");
    return 0;
}

#include <stdio.h>

int main()
{
    printf("abcdefjhl");
    return 0;
}

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

解释:基本不用

(12)\ddd:ddd表示1到3个八进制的数字

例如:\130------>表示字符X

(13)\xdd:dd表示2个十六进制的数字

例如:\x30-------->表示字符0

需要注意的是我们以上两个转义字符表示的都是相应进制的数字转换成10进制后的数字在ACSII码表上所对应的字符
eg:

#include <stdio.h>

int main()
{
    printf("%c\n",'\130');
    return 0;
}

#include <stdio.h>

int main()
{
    printf("%c\n",'\x30');
    return 0;
}

(14)\0null字符,代表没有内容,用于字符串的结束标志,其ASCII码值是0

可以和\ddd相互理解

#include <string.h>//strlen的头函数

int main()
{
    int len = strlen("abc");//求字符串长度且求的是\0之前的字符串长度
    printf("%d\n",len);
    return 0;
}

参考:link

12.语句和语句分类

C语言的代码是由一条一条的语句构成的,C语言中的语句可分为以下五类。

(1)空语句

空语句是最简单语句,一个分号就是一条语句,是空语句。

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

注意:空语句一般出现在:这里需要一条语句,但是这条语句不需要做任何事。

(2)表达式语句

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

#include <stdio.h>

int main()
{
    int a = 20;
    int b = 0;
    b = a + 5;//表达式语句
    return 0:
}   

(3)函数调用语句

只要是一次函数调用,那么它就算一个函数调用语句,比如说在前面调用了printf函数,那么上面那一个就是函数调用语句

#include <stdio.h>

int main()
{
    printf("hehe\n");//函数调用语句
    return 0;
}

(4)复合语句

复合语句其实就是前面讲过的代码块,成对括号中的代码就构成了一个代码块,也被称为复合语句

(5)控制语句

控制语句,用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构,顺序结构,选择结构,循环结构),他们有特定的语句定义符组成,C语言有9种控制语句(还没学习,暂时不写)。

13.注释是什么?为什么要写注释?

注释是对代码的说明,是写给程序员自己或者是其他程序员看的,可以帮助我们更好的理解代码,但是注释并不代表越写多越好,只需要把有需要的注释给标出来,不然会看得很繁杂,我们的注释它是会被编译器给忽略掉的,所以说我们写的注释是对我们的代码没有影响的。写注释一定程度上也反映了程序作者的素质,在未来找工作的时候,写代码时留下必要的注释可以给面试官留下好的印象。如果不写注释,后期一定程度上会让看代码的人感到很难受。

14.C语言注释的两种形式

(1)/**/的形式

1./注释/
2.
3./*
4.注释
5.*/
注意:这种注释可以插在行内且/**/的注释形式是不支持嵌套的。

(2)//的形式

1.//注释
2.
3.printf(“hehe\n”)//注释

注意:以上两种注释形式都不能放在双引号里面,因为双引号里面的注释符号会成为字符中的一部分,解释为普通符号,失去注释作用。

15.注释会被替换掉

编译的时候,注释会被替换成一个空格。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐