一:C语言常见概念

一:C语言常见概念

1.认识C语言:

​ C语言是人和计算机交流的语言

​ C语言是一门面向过程 的语言,而C++,Java,Python等是一门面向对象的语言

​ 软件开发(项目):面向过程+面向对象

​ 操作系统(Windows,Linux等) 系统编程

​ 计算机网络 网络编程,网络协议

​ 数据库(MySQL

​ 数据结构与算法

2.C语言的历史:

​ C语言最初是作为Unix系统的开发工具而发明的

复制代码
		Unix系统是开源的操作系统   -->   Linux操作系统

​ 1969年发明了B语言 -- 1972年C语言现世 -- 1973年Unix系统使用C语言重写(在此之前Unix系统是用汇编语言写的) -- 1988年美国国家标准协会(ANSI)正式将C语言标准化

3.编译器:

​ 一:编译和链接:

​ 1. C语言是一门编译型计算机语言,其源代码都是文本文件,本身无法执行,必须通过编译器的翻译和链接器的链接,生成二进制的可执行文件(++计算机能够识别的是二进制的指令++),才可执行。

​ 2. C语言需要依赖编译器将计算机语言转换成机器能够执行的机器指令

​ 3. C语言代码是放在 .c 文件中的,想要得到最终运行的可执行程序,中间要经过编译和链接的2个过程

​ 4. C语言把 .c 为后缀的文件称为源文件 ,把 .h 为后缀的文件称为头文件

​ 二:集成开发环境(IDE):用于提供程序开发环境的应用程序,一般包括代码编辑器,编译器,调试器和图形用户界面等工具。集成了代码编写功能,分析功能,编译功能,调试功能等一体化的开发软件服务套

一个工程一般都会有多个源文件组成: 如下图:

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

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

4.第一个C语言程序:
c 复制代码
#include <stdio.h>
int main()
{
    printf("Hello C语言!!!");
    return 0;
}

​ 代码运行的快捷键:CTRL + F5

​ 代码调试:F10

​ 字体大小调节:CTRL + 鼠标滚轮

​ 代码注释:CTRL + K + C

​ 取消代码注释:CTRL + K + U

注意: 1. 一条语句结束后要有分号

​ 2. 代码中不能使用中文符号

​ 3. 项目名称最好要见名知意,不要使用中文,不要使用特殊字符,不要使用空格

5.main()函数:

​ 每个C语言程序不管有多少行代码,都是从main()函数开始执行的,main()函数是程序的入口,因此,main()函数也被叫做主函数

main()前面的int表示main()函数执行结束的时候返回一个整数类型的值

​ 所以,在main()函数的最后写return 0; 正好前后呼应

  • main()函数是程序的入口
  • main()函数有且仅有一个
  • 一个项目中可以有多个 .c 文件,但是只能有一个main()函数(因为程序的入口只能有一个)
6.库函数:

​ 为了不再重复实现常见的代码,让程序提升开发效率,C语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库 ,这些函数也被称为库函数,在这个基础上一些编译器厂商可能会额外扩展提供部分函数(这些函数其它的编译器不一定支持)

​ 一个系列的库函数一般会声明在同一个文件中,所以库函数的使用,要包含对应的头文件

7.关键字:

​ C语言中有一批保留名字的符号,这些符号被称为保留字 或者关键字

  • 关键字都有特殊的意义,是保留给C语言使用的
  • 在创建标识符变量的时候是不能和关键字重复的
  • 关键字也是不能自己创造的

C语言的32个关键字:

注意:C99 标准中加入了 inlinerestrictBool Comploex等关键字,不过使用最多的还是上面的32个关键字

8.字符和ASCII编码:

​ 在键盘上敲出的各种符号,如:ak@#5等,这些符号都被称为字符 ,在C语言中字符是用单引号 括起来的,如:'a''k''@''#''5'

​ 在计算机中所有的数据都是以二进制的形式存储的,而我们给每一个字符所编写的二进制序列,这个就叫做编码 ,后来,为了方便大家相互通信,不造成混乱,美国国家标准协会(ANSI)出台了一个标准ASCII编码,将键盘上敲出的所有字符都进行了固定的编号,C语言中采用字符就遵循了ASCII编码的方式

ASCII编码表:

  • 字符AZ的ASCII编码值是从6590
  • 字符az的ASCII编码值是从97122
  • 对应的大小写字符(a和A)的ASCII编码值的差值是32
  • 数字字符09的ASCII编码值是从4857
  • 换行\n的ASCII编码值是:10
  • 在这些字符中ASCII编码值0~31的这32个字符是不可打印字符,无法显示到屏幕上观察
c 复制代码
//将字符32~127这些可打印字符在屏幕上打印出来
#include <stdio.h>
int main()
{
    int i = 0;
    for(i = 32;i <= 127;i++)
    {
        if(i % 16 ==0)
            printf("\n");
        printf("%c",i);
    }
    return 0;
}

注意: 1. 字符的打印格式使用占位符 %c 来指定

​ 2. 要想表示字符一定是要单引号括起来的

9.字符串和\0:

​ C语言中使用双引号 括起来的一串字符就被称为字符串 ,如:"乔越"

字符串的打印格式使用占位符 %s 来指定

​ ++双引号引起来的叫字符串,单引号引起来的才叫字符++ ,字符串是一串字符,里面是由一个或者多个字符组成的,也可以没有字符,当里面一个字符都没有的时候,叫做空字符串

​ 汉字是占两个字符的,所以单引号不能包裹汉字,只能包裹单个字符,而双引号可以包裹汉字

打印字符串有两种方式:

c 复制代码
//第一种:
#include <stdio.h>
int main()
{
    printf("haha\n");
    return 0;
}
c 复制代码
//第二种:
#include <stdio.h>
int main()
{
    printf("%s","haha");
    return 0;
}

​ C语言字符串中在字符串的末尾还隐藏着一个字符\0,这个\0是字符串的结束标志

例如: 字符串"abcdef",实际上看到的是6个字符:'a''b''c''d''e''f' 但是实际上在其末尾还隐藏一个 \0 的转义字符,\0是字符串的结束标志 ,所以在使用库函数printf()打印字符串或strlen()计算字符串长度的时候,遇到 \0 就自动停止了

C语言也可以把一个字符串放在一个字符数组中(数组就是一组数据):

c 复制代码
#include <stdio.h>
int main()
{
    //C语言中用char类型来表示字符
    //char qwe[3];//表示这个数组里面可以放3个字符
    //char qwr[5];//表示这个数组里面可以放5个字符
    char qwe[] = "abc";//这个的里面有\0
    char qwr[] = {'a','b','c'};//这个的里面没有\0
    printf("%s\n",qwe);//正常输出
    printf("%s\n",qwr);//会出现乱码
    return 0;
}

图示:

注意: 因为qwe遇见\0就终止运行了,所以打印的结果只有a,b,c,而qwr后面没有\0终止,所以会继续往下运行,直到遇见\0终止打印,所以打印结果会有其它内存空间的内容

c 复制代码
#include <stdio.h>
int main()
{
    char qwr[] = {'a','b','c','\0'};
    printf("%s\n",qwr);//输出正常,不再出现乱码
    return 0;
}
c 复制代码
#include <stdio.h>
int main()
{
    char asd[] = "abc\0def";
    printf("%s\n",asd);//只会打印abc,因为后面遇到了\0终止
    return 0;
}

库函数strlen():用来返回一个字符串的长度

c 复制代码
#include <stdio.h>
#include <string.h> //strlen库函数的头文件
int main()
{
    int len = strlen("abc"); //用int类型的变量去接收,然后返回这个字符串的长度
    printf("%d\n",,len);
    return 0;
}

注意: 上述代码会出现警告,因为strlen()返回的类型本质是size_t,而size_t这个类型是专门用来接收求长度的函数的返回值的,并且在strlen()这个库函数时要包含头文件

c 复制代码
#include <stdio.h>
#include <string.h> //strlen库函数的头文件
int main()
{
    size_t len = strlen("abc"); //用size_t类型的变量去接收,然后返回这个字符串的长度
    printf("%d\n",,len);
    return 0;
}
10.转义字符:

​ 转义字符 -- 转变了原来意思的字符

例如: \n是一个转义字符表示换行的意思,可以简单的理解为 \ 让n的意思发生了转变,n本来只是一个普通的字符,被 \ 转义为换行的意思

C语言中的转义字符:

转义字符 描述
? 在书写连续多个问号时使用,防止它们被解析成三字母词,在新的编辑器上无法验证了
\ ' 用于表示字符常量 '
\ '' 用于表示一个字符串内部的双引号
\ \ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警报,使终端发出警报声或出现闪烁,或者两者同时发生
\b 退格键,光标回退一个字符,但不删除字符
\f 换页符,光标移到下一页,在现代系统上,已经无法验证了,行为改成类似于\v
\n 换行符
\r 回车符,光标移到同一行的开头
\t 制表符,光标移到下一个水平制表位,通常是下一个8的倍数
\v 垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列
\ddd 字符的八进制表示形式,ddd表示1~3个八进制的数字 如:\130 -- 表示字符X
\xdd 字符的十六进制表示形式,dd表示2个十六进制的数字 如:\x30 -- 表示字符0
\0 null字符,没有内容,用于字符串的结束标志,其ASCII编码值是0
c 复制代码
#include <stdio.h>
int main()
{
    printf("%c",'\'');// \':打印一个单引号
    printf("%s","\"");// \":打印一个双引号
    printf("C:\\test\\test.c");// \\:防止被转义
    printf("\a");// \a:触发系统(蜂鸣器)警报
    printf("abc\bdef");//会打印abdef,\b:将c删除,退了一格
    printf("ab\tdef\tq\txxxxx");// \t:对齐到\t的宽度
    return 0;
}
c 复制代码
#include <stdio.h>
int main()
{
    printf("%c",'\130');// 将130这个八进制数字转换为十进制数字:0*8**0+3*8**1+1*8**2=88,0乘8的0次方+3乘8的1次方+1乘8的2次方=88,而88在ASCII表上对应的字符就是X
    printf("%c",'\x30');// 将30这个十六进制数字转换为十进制数字:0*16**0+3*16**1=48,0乘16的0次方+3乘16的1次方=48,而48在ASCII表上对应的字符就是0
    return 0;
}

注意: 一个转义字符算是一个字符

​ 当求字符长度的时候,如果有 \ 后面加上其它的字符的情况,那么也会被默认为是一个转义字符,虽然无作用,但会将它们算作成一个字符

c 复制代码
#include <stdio.h>
#include <string.h>
int main()
{
    size_t len = strlen("c:\test\123.c");
    printf("%d\n",len); //最后的结果,字符数量是9.因为一个转义字符只能算是一个字符(\t;\123)
    return 0;
}
c 复制代码
#include <stdio.h>
#include <string.h>
int main()
{
    size_t len = strlen("c:\te\st\123.c"); //答案也是9,因为C语言把\s整体当成了一个转义字符
    printf("%d\n",len); 
    return 0;
}
11.语句和语句分类:

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

​ 1. 空语句

​ 2. 表达式语句

​ 3. 函数调用语句

​ 4. 复合语句

​ 5. 控制语句

一:空语句

​ 空语句是最简单的,一个分号就是一条语句,也就是空语句

​ 空语句出现的地方是:这里需要一条语句,但是这条语句不需要做任何事,就可以写一个空语句

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

二:表达式语句

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

c 复制代码
#include <stdio.h>
int main()
{
    int a = 10;
    int b = 0;
    b = a + b; //表达式语句
    printf("%d",b);
    return 0;
}

三:函数调用语句

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

c 复制代码
#include <stdio.h>
int Add(int x,int y)
{
    return x+y;
}
int main()
{
    printf("haha\n");// 函数调用语句
    int ret = Add(2,3);// 函数调用语句
    return 0;
}

四:复合语句

​ 复合语句就是代码块,一对大括号中的代码就构成一个代码块,也被称为复合语句

c 复制代码
#include <stdio.h>
void print(int arr[],int sz)//函数的大括号中的代码也构成复合语句
{
    int i = 0;
    for(i = 0;i < sz;i++)
    {
        printf("%d",arr[i]);
    }
}
int main()
{
    int i = 0;
    int arr[10] = {0};
    for(i = 0;i < 0;i++)//for循环循环体的大括号中的就是复合语句
    {
        arr[i] = 10 - i;
        printf("%d\n",arr[i]);
    }
    return 0;
}

五:控制语句

​ 控制语句用于控制程序的执行流程,以实现程序的各种结构方式

​ C语言支持的三种结构:顺序结构;选择结构;循环结构

​ C语言有九种控制语句,可分为以下三类:

  1. 条件判断语句(分支语句): if语句;switch语句
  2. 循环执行语句: do while语句;while语句;for语句
  3. 转向语句: break语句;goto语句;continue语句;return语句
12.注释:
  • 注释是对代码的说明,编译器会忽略注释,也就是,注释对代码没有任何影响
  • 注释是给人(自己或者他人)看的
  • 好的注释可以帮助理解代码,但不要过度注释,不写没有必要的注释

注释的两种形式:

c 复制代码
	第一种:
/*
  我是第一种注释
  我还是多行注释
*/
	
	第二种:
//我是第二种注释,是单行注释

注意: 第一种的注释风格是不支持嵌套注释的,也就是注释里面还有一个这样的注释

;选择结构;循环结构

​ C语言有九种控制语句,可分为以下三类:

  1. 条件判断语句(分支语句): if语句;switch语句
  2. 循环执行语句: do while语句;while语句;for语句
  3. 转向语句: break语句;goto语句;continue语句;return语句
12.注释:
  • 注释是对代码的说明,编译器会忽略注释,也就是,注释对代码没有任何影响
  • 注释是给人(自己或者他人)看的
  • 好的注释可以帮助理解代码,但不要过度注释,不写没有必要的注释

注释的两种形式:

c 复制代码
	第一种:
/*
  我是第一种注释
  我还是多行注释
*/
	
	第二种:
//我是第二种注释,是单行注释

注意: 第一种的注释风格是不支持嵌套注释的,也就是注释里面还有一个这样的注释

相关推荐
qq_537562673 分钟前
跨语言调用C++接口
开发语言·c++·算法
wjs202414 分钟前
DOM CDATA
开发语言
Tingjct15 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
猷咪41 分钟前
C++基础
开发语言·c++
IT·小灰灰43 分钟前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧44 分钟前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q1 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳01 小时前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾1 小时前
php 对接deepseek
android·开发语言·php
2601_949868361 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter