【手撕C语言 第二集】初识C语言

2024-01-17 12:20
文章标签 语言 初识 第二集

本文主要是介绍【手撕C语言 第二集】初识C语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

​​在这里插入图片描述

一、变量的作用域和生命周期

作用域:一个变量在哪里可以使用它,哪里就是它的作用域。
局部变量的作用域:变量所在的局部范围
全局变量的作用域:整个工程

不管整个工程里面有多少源文件,都可以使用全局变量。这样的弊端是不安全。
比如:
在add.c文件中定义全局变量,int g_val=2022
在test.c文件中想要使用add.c文件中定义的全局变量
extern int g_val; //需要声明外部符号
int main(){
printf(“%d\n”,g_val);
return 0;
}

生命周期:
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
全局变量的生命周期:整个程序的生命周期

二、常量

分类

(1)字面常量

100 整形字面值
‘w’ 字符字面值
3.14 浮点型字面值
“abcd” 字符串常量

(2)const修饰的常变量

const int num=9;
这里的num是const修饰的常变量。const修饰的常变量在C语言中只是在语法层面上限制了变量num不能被修改,但是num本质上还是一个变量,所以叫常变量。

const int n=10;
int arr[n]=0;
以上这样的写法是不对的,因为n虽然被const修饰,具有了常属性,不能被修改,但本质上还是变量,所以不能用来指定数组的大小。

int n=9;
int arr[n];
以上代码是在支持C99编译器上可编译的。C99中,引入了变长数组的概念,变长数组的大小是可以使用变量来指定的,但是数据不能初始化。

在VS2019中是不支持C99的变长数组的,所以没法验证。
在Linux中的gcc编译器是支持变长数组的。

(3)#define定义的标识符常量

#define定义的标识符常量,可以写在{}中,不能被修改,可以用来自指定数组的大小。

#define Max 100
printf(“%d\n”,MAX);

(4)枚举常量

枚举 enum
性别:男、女、秘密
三原色:RED GREEN BLUE
enum Sex{
male,
female,
secret
};
enum Sex是声明的一个表示性别的枚举类型
下面三个符号是这个枚举类型的未来的可能取值

enum Sex s=female;
用这个枚举类型创建的变量s,用枚举类型的可能取值进行赋值

priintf(“%d\n”,female);
注意:枚举常量的默认是从0开始,依次向下递增1的
如果想要指定枚举常量的某个值,可以自己在枚举类型的可能取值中进行赋值
enum Sex{
female=11,
male,
secret
};

三、字符串

"hello bit.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符
串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串
内容。

#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
char arr1[] = "bit";
char arr2[] = {'b', 'i', 't'};
char arr3[] = {'b', 'i', 't''\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}

在这里插入图片描述
在这里插入图片描述

strlen是一个库函数,专门求字符串长度,头文件是string.h
strlen从起始位置开始数,统计\0字符前出现的字符个数

四、转义字符

转义字符顾名思义就是转变意思

转义字符 释义
? 在书写连续多个问号时使用,防止他们被解析成三字母词
’ 用于表示字符常量’
\“ 用于表示一个字符串内部的双引号
\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X
\xdd dd表示2个十六进制数字。 如: \x30 0

#include <stdio.h>
int main()
{
//问题1:在屏幕上打印一个单引号',怎么做?
//问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
printf("%c\n", '\'');
printf("%s\n", "\"");
return 0;
}

在这里插入图片描述

笔试题

//程序输出什么? 14
#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef"));// \62被解析成一个转义字符printf("%d\n", strlen("c:\test\628\test.c"));return 0;
}

\ddd
ddd是8进制数数字(0~7)
\62被解析成一个转义字符

五、注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉
  2. 代码中有些代码比较难懂,可以加一下注释文字
    比如
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
//C++注释风格
//int a = 10;
//调用Add函数,完成加法
printf("%d\n", Add(1, 2));
return 0;
}
比特就业课-专注IT大学生就业的精品课程
比特主页:https://m.cctalk.com/inst/s9yewhfr

注释有两种风格:
C语言风格的注释 /xxxxxx/
缺陷:不能嵌套注释
C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行

六、选择语句

如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!

#include <stdio.h>
int main()
{
int coding = 0;
printf("你会去敲代码吗?(选择1 or 0):>");
scanf("%d", &coding);
if(coding == 1)
{
prinf("坚持,你会有好offer\n");
}
else
{
printf("放弃,回家卖红薯\n");
}
return 0;
}

七、循环语句

C语言中如何实现循环呢?
🎗️while语句-讲解
🎗️for语句(后期讲)
🎗️do … while语句(后期讲)

//while循环的实例
#include <stdio.h>
int main()
{printf("加入学校\n");int line = 0;while (line <= 20000){line++;printf("我要继续努力敲代码\n");}if (line > 20000)printf("好offer\n");return 0;
}

八、函数

函数的特点就是简化代码,代码复用

#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

九、数组

要存储1-10的数字,怎么存储?
C语言中给了数组的定义:一组相同类型元素的集合

1.数组定义

整型数组

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

字符数组
两种方法
(1)

char arr[]="bit";

(2)

char arr[]={'b','i','t'};

2.数组的下标

C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
比如

int arr[10] = {0};
//如果数组10个元素,下标的范围是0-9

在这里插入图片描述

3.数组的使用

#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}

在这里插入图片描述

十、操作符

算术操作符
在这里插入图片描述
移位操作符
在这里插入图片描述
位操作符
在这里插入图片描述
赋值操作符
在这里插入图片描述
单目操作符
在这里插入图片描述
关系操作符
在这里插入图片描述
逻辑操作符
在这里插入图片描述
条件操作符
在这里插入图片描述
逗号表达式
在这里插入图片描述
下标引用、函数调用和结构成员
在这里插入图片描述

这篇关于【手撕C语言 第二集】初识C语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616041

相关文章

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

Go语言中如何进行数据库查询操作

《Go语言中如何进行数据库查询操作》在Go语言中,与数据库交互通常通过使用数据库驱动来实现,Go语言支持多种数据库,如MySQL、PostgreSQL、SQLite等,每种数据库都有其对应的官方或第三... 查询函数QueryRow和Query详细对比特性QueryRowQuery返回值数量1个:*sql

GO语言中gox交叉编译的实现

《GO语言中gox交叉编译的实现》本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求: