关于我、重生到500年前凭借C语言改变世界科技vlog.2

1.数据类型的介绍

1.1 数据类型分类

C语言的数据类型多种多样,类型不仅是我们了解数据的开始,也是数据初始化、函数自定义等的操作,编译器只有知道了数据的类型,才能进行相应的操作
在这里插入图片描述

字符型:char、[signed] char(有符号字符)、[unsigned] char(无符号字符)

整型:int、[signed] int、unsigned int
短整型:short [int]、[signed] short [int]、unsigned int [int]
长整型:long [int]、[signed] long [int]、unsigned long [int]
更长的整型:long long [int]、[signed] long long [int]、unsigned long long [int]

浮点型:float、double、long double

布尔类型:布尔类型本不是专门的类型,后来为了表示真假,引入了布尔类型_Bool或bool,使用布尔类型必须包含头文件#include <stdbool.h>,布尔类型返回的是true或false,表示真假

注意每种类型的数据都有自己的长度,存储的数据范围有所差异,这里就不过多赘述(详情可看https://legacy.cplusplus.com/)

1.2 sizeof操作符

sizeof是一个关键字,也是个操作符,用于计算操作符数的类型长度,单位是字节
sizeof有两种计算方式:sizeof(类型)、sizeof 表达式
这里要注意的是sizeof后边的表达式是不参与真实运算的,例如:

#include <stdio.h>
int main() 
{
    int num = 10;
    int result = sizeof(num + 20);
    // 这里 num + 20 并不会真正进行加法运算,只是根据 num 的类zd型(int)来确定大小。
    printf("Size of num + 20: %zd\n", result);
    return 0;
}

显而易见这里输出的result的值应为4,在VS2022的X64环境下,常见的int为4个字节,char为1个字节,这里只是根据其类型得出是4个字节。而且sizeof需要用%zd(无符号整型)来打印,sizeof的计算结果是size_t类型的。

sizeof 运算符的返回值,C 语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是unsigned int ,也有可能是 unsigned long ,甚至是 unsigned long long ,对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。C 语言提供了⼀个解决方法,创造了⼀个类型别名 size_t ,用来统⼀表示 sizeof 的返回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是unsigned long long

1.3 signed和unsigned

signed表示一个类型带有正负号,unsigned表示一个类型不带有正负号,也就是正整数,所以对于int来说完整的写法应该是signed int,只不过平常忽略不写,但写了也不算错

int 类型也可以不带正负号,只表示非负整数,这时就必须使用关键字unsigned声明变量。unsigned int里面的int可以省略,也就是可以写成unsigned,字符char也存在signed、unsigned

值得注意的是C语言规定char是否默认带有正负号由当前系统决定,这就是说,char 不等同于 signed char ,它有可能是 signed char ,也有可能是unsigned char

2.变量的介绍

2.1 创建与初始化

我们都知道变化的量叫变量,不变的称为常量,创建形式为data_type name,第一个为数据类型,第二个为变量名,例如int a = 10,在变量在创建的时候就给⼀个初始值,这就叫初始化

2.2 分类

全局变量:在大括号外部定义的变量就是全局变量
全局变量的使用范围更广,整个工程中想使用,都是有办法使用的

局部变量:在大括号内部定义的变量就是局部变量
局部变量的使用范围是比较局限,只能在自己所在的局部范围内使用的

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

2.3 存储

内存中有三个区域:栈区、堆区、静态区

  1. 局部变量是放在内存的栈区
  2. 全局变量是放在内存的静态区
  3. 堆区是用来动态内存管理的(后期会介绍)

3.操作符的介绍

3.1 算术操作符:+、-、*、/、%

C语⾔中为了方便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。
分别是: + - * / % ,这些操作符需要两个操作数进行计算的都是双目操作符,操作符也叫做运算符

用+ 和 - 来完成加法和减法

运算符 * 用来完成乘法

运算符 / 用来完成除法,除号的两端如果是整数,执行的是整数除法,得到的结果也是整数,如果运算数中至少有一个float浮点数,就能得到浮点数

运算符 % 表示求模(余)运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数,负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定

3.2 赋值操作符:=和复合赋值

赋值操作符 = 是⼀个随时可以给变量赋值的操作符,要赋的值放在右边。赋值也可以连续赋值,从右向左依次赋值

对一个数进行自增、自减操作

int a = 10;
a = a+3;
a = a-2;

用复合赋值的方法:

int a = 10;
a += 3;
a -= 2;

代码会显得更方便简洁,对以上的算术操作符都适用

3.3 单目操作符:++、–、+、-

C语言中还有⼀些操作符只有⼀个操作数,被称
为单目操作符。 ++、–、+(正)、-(负) 就是单目操作符

前置++

int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
printf("a=%d b=%d\n",a , b);

计算口诀:先+1,后使用
a原来是10,先+1,后a变成了11,再使用就是赋值给b,b得到的也是11,所以计算后,a和b都是11

后置++

int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);

计算口诀:先使用,后+1
a原来是10,先使用,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接计算后a是11,b是10

前置–和后置++与上面同理

4.强制类型转换

以一段代码做例子就明白了

int a = 3.14;
//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告

消除这个警告,就可以使用强制类型转换

int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分入代码片

注意强制转化只在万不得已的时候使用

5.占位符的介绍及使用

占位符在printf中这样使用:

#include <stdio.h>
int main()
{
 printf("There are %d apples\n", 3);
 return 0;
}

这里输出There are 3 apples,这样输出语句更能提高程序的稳定性和准确性

除此之外,还有很多常见的占位符
• %c :字符。
• %d :十进制整数
• %f :小数(包含 float 类型和 double 类型)
• %p :指针(用来打印地址)
• %s :字符串。
• %u :无符号整数
• %x :十六进制整数
• %zd : size_t 类型

限定宽度

#include <stdio.h>
int main()
{
 printf("%5d\n", 123); // 输出为 "  123"
 return 0;
}

%5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。输出的值默认是右对齐,即输出内容前面会有空格
如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入⼀个 - 号

总是显示正负号

默认情况下, printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可
以在占位符的 % 后面加⼀个 +

限定小数位数

// 输出 Number is 0.50
#include <stdio.h>
int main()
{
 printf("Number is %.2f\n", 0.5);
 return 0;
}

如果希望小数点后面输出3位( 0.500 ),占位符就要写成 %.3f
也可以和限定宽度结合使用,比如%6.2f,输出为"**0.50"(这里的*表示空格)
最小宽度和小数位数这两个限定值,都可以用 *代替,通过 printf() 的参数传入

输出部分字符串

可以用 %.[m]s 指定输出的长度,其中 [m] 代表⼀个数字,表示所要输出的长度

// 输出 hello
#include <stdio.h>
int main()
{
 printf("%.5s\n", "hello world");
 return 0;
}

这里输出前五个字符,即“hello”

6.scanf函数的介绍

scanf() 函数用于读取用户的键盘输入
程序运行到这个语句时,会停下来,等待用户从键盘输入,输入数据、按下回车键后, scanf() 就会处理用户的输入,将其存入变量

scanf的使用方法与printf类似

scanf("%d%d%f%f", &i, &j, &x, &y);

不过scanf需要加取地址符号&(后面会讲)

注意scanf() 的返回值是一个整数,表示成功读取的变量个数。
如果没有读取任何项,或者匹配失败,则返回 0 。
如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF (-1)

希望读者们多多支持

小编会持续更新

你们的鼓励就是我前进的动力!

在这里插入图片描述

在Linux系统中,可以通过多种方式停止名为`vlog.sh`的进程。以下是一些常用的方法: 1. 使用`kill`命令: 如果你知道进程的PID(进程标识符),可以直接使用`kill`命令发送信号给该进程。例如,如果你想停止PID为1234的进程,可以使用: ```bash kill 1234 ``` 如果你不知道PID,可以先使用`ps`命令找到该进程的PID,然后再执行`kill`命令。 2. 使用`pkill`命令: `pkill`命令可以使用进程名来杀死进程。如果你想停止所有名为`vlog.sh`的进程,可以使用: ```bash pkill -f vlog.sh ``` 这里`-f`参数表示`pkill`会匹配进程的命令行信息,确保只杀死确实是你想要的`vlog.sh`脚本进程。 3. 使用`killall`命令: 另一个选项是`killall`命令,它同样可以根据进程名来杀死进程。使用方法如下: ```bash killall vlog.sh ``` 注意,这种方法会杀死所有名为`vlog.sh`的进程,所以请确保这不是系统中其他重要进程的名称。 在执行上述命令之前,请确保你有足够的权限来停止目标进程,并且理解这些命令的影响。特别是,`kill`、`pkill`和`killall`命令发送的默认信号是SIGTERM(信号15),它告诉进程优雅地终止。如果进程没有响应,你可能需要使用SIGKILL(信号9)强制终止它,但这可能会导致数据丢失或其他问题。发送SIGKILL信号的命令如下: ```bash kill -9 PID ``` 或者对于`pkill`和`killall`: ```bash pkill -9 -f vlog.sh killall -9 vlog.sh ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值