当前位置: 首页 > article >正文

初识c语言

0.前言

简单了解c语言的基础知识,对c语言有大致了解,后续会更新每个知识点详细讲解。

1、什么是c语言

C语言是一门面向过程的、抽象化的通用计算机编程语言,广泛应用于底层开发。常用的编译器有GCC、MSVC。

2、编写c语言代码

工具:VS2019

步骤:创建项目、创建源文件、写代码

具体步骤如下:

首先打开VS2019编译器,点击“创建新项目”。

 然后选中“空项目”,点击“下一步”。

 可以根据自己需求修改“项目名称”和“位置”,“项目名称”最好不要包含汉语、特殊字符、空格等。修改完后点击“创建”​​​。​​​

 项目创建成功后,接着创建源文件。在“资源管理器”栏中右击“源文件”,依次点击“添加”、“新建项”。

 点击“c++文件”,因为我们编写c语言,所以文件名称后缀改为“.c”,最后点击“添加”。

 创建源文件之后的界面如下所示,现在就可以在空白区域编写c语言代码啦。

 接下来编写一小段代码,使用快捷键ctrl+f5运行代码。结果如下图所示。

3、变量和常量

变量是用来描述生活中变化的数据;

常量是用来描述生活中不变的数据。

3.1变量

3.1.1定义变量的方法

定义变量的基本格式为“数据类型 变量名”。例如:int age;

在定义变量时还可以为其赋值。例如:int year = 2023;

3.1.2变量的命名

变量名只能由字母、数字和下划线组成,但不能由数字开头。此外,变量名区分大小写,不能使用关键字。

3.1.3变量的分类

变量可分为局部变量和全局变量。在函数内部定义的变量为局部变量,只在本函数范围内有效;在函数外部定义的变量为全局变量,从程序开始到结束都有效。

当全局变量和局部变量同名时,优先使用局部变量。

3.1.4变量的作用域和生命周期

作用域:限定变量可用性的代码范围。

局部变量的作用域是变量所在的局部范围;全局变量的作用域是整个工程。

生命周期:变量从创建到销毁的时间段。

局部变量的生命周期从进入作用域开始,一直到出作用域结束;全局变量的生命周期是整个程序的生命周期。

3.2常量

3.2.1常量的几种形式

c语言中的常量分为以下几种:

字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量

字面常量:c语言中通常使用字面常量对变量直接赋值。如下面代码中的“10”、“e”、“abcdef”都是字面常量。

int main()
{
	int a = 10;
	char b = 'e';
	char c[] = "abcdef";
	return 0;
}

const修饰的常变量:被const修饰的变量具有常属性,值不能再被改变,但本质上仍是变量。如图所示,变量n被const修饰后不能再被改变,具有常属性。

如图所示,即使n被const修饰,n本质上还是一个变量。

 

 #define定义的标识符常量:使用#define定义一个标识符来表示一个常量,一般形式如下。

#define Max 100

 枚举常量:枚举是c语言提供的一种可以自定义类型的方法,将变量的可能取值一一列举出来,这些可能取值被称为枚举常量。形式如下。

enum Sex
{
	MALE,
	FEMALE,
	SECRET
};

枚举常量默认有初值,第一个枚举常量默认值为0,第二个枚举常量默认值为1,……以此类推。

4、字符串和转义字符

由双引号引起来的一串字符称为字符串。字符串的结束标志为\0,隐藏在字符串后面。如果一个字符串中没有\0,则在打印该字符串时会出现错误。

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = { 'a','b','c','d','e','f' };

	printf("%s", arr1);
	printf("%s", arr2);
	
	return 0;
}

 在调试中可以看出,数组arr1中包含\0,而数组arr2中不包含\0

从打印的结果来看,arr2的结果与预期值不符,因为只有遇到\0字符串才算结束,而arr2中没有结束标志\0,所以会一直打印,直到遇见\0

转义字符是以‘\’开头的字符,后面跟一个或几个其他字符,将‘\’后的字符转变为其他的意义。

常用的转义字符如下:

在计算字符串长度时,注意观察字符串中是否包含转义字符,如果包含转义字符,则转义字符算作一个字符。例如下面这段代码中,\t、\234、\t都为转义字符,分别看作一个字符,所以字符串总长度为13。

int main()
{
	printf("%d",strlen("c:\test\234\test.c"));
	return 0;
}

5、注释

注释的使用场景如下:代码中有一些不必要的代码可以注释掉;还可以在代码中添加相应的注释,对代码进行解释说明。

注释方式有两种,一种是:/*xxxxxxxxx*/,一次可注释多行,但这种方式不能嵌套使用;另一种是://,一次注释一行,可以嵌套使用。

6、选择语句

选择语句包括if语句、switch case语句。其中,if语句分为单分支if语句、双分支if语句、多分支if语句。

7、循环语句

循环语句特点:在循环条件成立时,反复执行某程序段,直到条件不成立为止。循环语句包括while语句、do while语句、for语句。

8、函数

一个程序可由一个主函数和若干个函数构成。主函数调用其他函数,其他函数也可以相互调用,同一个函数可以被一个或多个函数调用任意多次。

9、数组

数组是一组相同类型元素的集合。数组通过下标来访问,数组元素的下标从0开始。

数组的定义:类型说明符 数组名 [常量表达式]

数组名为用户定义的数组标识符,常量表达式为数组元素的个数。

数组的初始化:类型说明符 数组名 [常量表达式] = {值,值,……,值}

如果给全部元素赋值,可以省略常量表达式;可以只给部分元素赋初值,其余默认初始值为0。

10、操作符

算术操作符:+  -  *  /  %

 / 两个操作数都为整数时,结果才为整数,操作上中只要有一个小数,结果为小数。

%两个操作数必须为整数。

移位操作符:>>  <<

<< 逻辑左移和算术左移相同,都是高位丢弃,低位补0

>> 逻辑右移高位补0,低位丢弃;算术右移高位补符号位,低位丢弃

位操作符:&  |  ^

位操作符的操作数必须为整数。

赋值操作符:=  +=  -=  *=  |=  %=  >>=  <<=  &=  ^=

单目操作符:! +  -  &   ~   *  sizeof  ++  --  (类型)

!逻辑取反

& 取地址

~ 对一个数的二进制按位取反

* 解引用

sizeof 操作数的类型长度(以字节位单位)

(类型) 强制类型转换

关系操作符:>  >=  <  <=  !=  ==

逻辑操作符:&&  ||

&& 逻辑与,左边为假,右边不用计算,结果一定为假

|| 逻辑或,左边为真,右边不用计算,结果一定为真

条件操作符:exp1?exp2:exp3

如果exp1为真,执行exp2;否则执行exp3

逗号表达式:exp1,exp2,……expn

从左向右执行,整个表达式结果是最后一个表达式结果

11、常见关键字

C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己不能创造关键字。常见关键字有: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

这里详细介绍一下static关键字。static可以用来修饰变量和函数。

(1)static修饰局部变量。一个普通局部变量被创建后放在内存中的栈区,而static修饰的局部变量被创建后放在内存中的静态区,使得变量出了作用域不会被销毁,改变了其生命周期,只有当程序结束后才会被销毁。

(2)static修饰全局变量。一个普通全局变量的作用域是整个项目工程,全局变量具有外部链接属性,在其他源文件内部使用时只需使用extern声明一下即可;而static修饰全局变量把外部链接属性变成了内部链接属性,改变了其作用域,只能在当前源文件中使用,其他源文件不能使用。

(3)static修饰函数。与全局变量类似,函数也具有外部链接属性,在其他源文件内部使用时只需使用extern声明一下即可;而static修饰函数把外部链接属性变成了内部链接属性,只能在当前源文件中使用,其他源文件不能使用。

12、#define定义常量和宏

#define定义常量基本形式:#define 标识符 常量

标识符为所定义的宏名,常量可以是常数、字符串等。

#define定义宏基本形式:#define 宏名(参数列表) 字符串

13、指针

为了有效使用内存,内存被划分为一个个内存单元,每个内存单元大小为1字节。而为了正确访问这些内存单元,为每个内存单元进行编号,这些编号就是内存单元的地址。地址指示了内存单元的位置,所以通常把这个地址称为指针。

在c语言中,允许用一个变量来存放指针,这种变量称为指针变量。在32位平台上,指针大小为4字节;在64位平台上,指针大小为8字节。

14、结构体

结构体,将不同类型的数据组合成一个有机的整体以便引用。声明一个结构体类型的一般形式:

struct 结构体名

{
        成员列表;

};


http://www.kler.cn/a/37411.html

相关文章:

  • node-red安全部署方式-安全登录功能
  • 音频采样器 Native Instruments Kontakt7 forMac/Windows图文安装教程
  • pycharm 配置docker: ssh连接
  • H3C-Cloud Lab实验-NAT实验
  • 《《《总结》》》PCL的42个实例整理:25~42
  • 【STM32MP135】修复10.1寸屏显示异色问题,添加极性配置
  • P5 第二章 电阻电路的等效变换
  • windows 编译libyuv
  • 奥特曼与钢铁侠【InsCode Stable Diffusion美图活动一期】
  • 【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】
  • 事务@transactional执行产生重复数据
  • Windows 安装 RabbitMq 和 Erlang
  • 精确长延时电路/数字式长延时电路设计
  • HTML <main> 标签
  • ARM day10 (IIC协议接收温湿传感器数据)
  • 运维开发面试题第一期
  • 线上后端接口响应过慢排查记录_MySQLthread cache命中率过低导致的接口响应慢
  • DALL·E2(unCLIP)、Stable Diffusion、IS、FID要点总结
  • GC书籍笔记
  • 探索华为、思科和瞻博网络的基本ACL和高级ACL配置方法