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

1.数组的介绍

数组简单理解就是一组相同类型元素的集合
注意:
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0
• 数组中存放的多个数据,类型是相同的
• 数组分为一维数组和多维数组,常见多维数组为二维数组
• 数组可以没有初始值,也可以没有大小

int arr1;
int arr2[] = {0}//大小为1

2.一维数组

2.1 一维数组的创建与初始化

一维数组其语法形式为:

type arr_name[常量值];
int arr[10] = {0};
//[]内是元素个数,{}内是初始化的元素

type 可以是 char、float、double等等,也可以是自定义类型的数据
数组去掉其数组名剩下的就是数组的类型,比如:int arr1[10] ,arr1数组的类型是 int [10]

一维数组的完全初始化

int arr[5] = {1,2,3,4,5};

一维数组的不完全初始化

int arr2[6] = {1};

第一个元素初始化为1,其余元素初始化为0

一维数组的错误初始化

int arr3[3] = {1, 2, 3, 4};

超出初始化元素的个数

注意:若 [ ] 内不写个数是可以的,该数组的元素个数根据 { } 的初始化决定

2.2 一维数组的使用

数组是有下标的,假设有一组数组:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};

那它的数组和下标对应关系为
在这里插入图片描述
所以C语言为了便于访问数组中的元素,创建了一个操作符 [ ] ,叫下引用操作符
比如我们访问第五个元素,可以使用 arr[4] 访问

使用循环可以对数组进行打印:

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

如果我们想要知道数组中元素的个数呢?
那此时我们可以使用C语言中的一个关键字 sizeof 计算类型或变量的大小
那只要计算出一个元素所占字节的个数,数组的元素个数就能算出来
这里我们选择第⼀个元素算大小就可以

#include <stido.h>
int main()
{
 int arr[10] = {0};
 int sz = sizeof(arr)/sizeof(arr[0]);
 printf("%d\n", sz);
 return 0;
}

sizeof(arr) 为数组大小, sizeof(arr[0]) 为数组一个元素的大小,这两相除即为元素个数

2.3 一维数组的存储

要了解一维数组在内存中的存储,我们可以依次打印其各个元素的地址进行观察:

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

在这里插入图片描述
从代码的运行结果来看每个数组地址之间相差4个字节,由此可知一维数组在内存中是连续存放的

3.二维数组

3.1 二维数组的创建与初始化

数组的元素都是内置类型的
如果我们把⼀维数组做为数组的元素,这时候就是二维数组
二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组

二维数组其语法形式为:

type arr_name[常量值1][常量值2]int arr[3][5];

这里的3表示数组有3行,5表示每行有5个元素

二维数组的完全初始化

 int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

12345为第一行,23456为第二行,34567为第三行

int arr4[3][5] = {{1,2},{3,4},{5,6}};

12000为第一行,34000为第二行,56000为第三行

二维数组的不完全初始化

int arr1[3][5] = {1,2};

第一行初始化为12000,第二、三行都为0

int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};

初始化时省略行,但是不能省略列

3.2 二维数组的使用

C语言规定,二维数组的行是从0开始的,列也是从0开始的,假设有一数组:

int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

那它的数组和下标对应关系为
在这里插入图片描述
访问二维数组的单个元素我们知道了,那如何打印整个二维数组呢?
其实我们只要能够按照⼀定的规律产生所有的行和列的数字就行

#include <stdio.h>
int main()
{
     int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
     int i = 0;
     for(i=0; i<3; i++) //产⽣⾏号
     {
        int j = 0;
        for(j=0; j<5; j++) //产⽣列号
        {
           printf("%d ", arr[i][j]); //输出数据
        }
         printf("\n");
      }
      return 0;
}

3.3 二维数组的存储

像一维数组⼀样,我们如果想研究⼆维数组在内存中的存储方式,我们也是可以打印出数组所有元素的地址的

#include <stdio.h>
int main()
{
     int arr[3][5] = { 0 };
     int i = 0;
     int j = 0;
     for (i = 0; i < 3; i++)
     {
        for (j = 0; j < 5; j++)
        {
            printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
        }
     }
     return 0;
}

在这里插入图片描述
从代码运行结果来看,每个元素的地址间也是相隔4个字节,所以二维数组中的每个元素都是连续存放的,像一维数组那样一字排开存储

4.C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我
们初始化数据的话,可以省略数组大小,这样的语法限制,让我们创建数组就不够灵活,有时候数组大了浪费空间,有时候数组小了不够用

于是C99中给了一个变长数组的新特性,允许我们使用变量指定数组大小,例如:

int n = a+b;
int arr[n];

数组 arr 就是变长数组,它的长度取决于变量 n 的值,编译器没法事先确定,只有运行时才能知道n是多少

变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化,它的好处是程
序员不必在开发时,随意为数组指定⼀个估计的长度,程序可以在运行时为数组分配精确的长度

遗憾的是在VS2022上,虽然支持大部分C99的语法,没有支持C99中的变长数组

希望读者们多多三连支持

小编会继续更新

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

在这里插入图片描述

在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 ```
评论 53
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值