学习C的知识点八--数组

1 数组

是一个能够存放若干个相同数据类型的数据结构
注意:
在声明数组的时候,想要往数组内存放什么数据类型,那么就必须给这个数组声明成对应的数据类型。

2 数据的声明及定义

数组的数据类型+数组名[数组的容量]={实际数据(每一个实际数据使用’,’分隔开)};
示例:

 1. int arr[5]={01,2,3,4}; 
 2. int arr[5]={4}; 将数组中的第0个元素初始化为4,其它元素初始化成03. int arr[5]={0}; 将数组中的所有元素初始化成0

注意:

  1. 在声明数组的时候,可以不规定数组长度,但是必须初始化数据。
    如: int arr[]={0,1,2,3,4};因为系统在运行到数组声明部分时,必须向内存空间申请一片固定大小的内存。那么数据的声明部分没有给到系统数组的大小是多少,那么系统就会去数组的定义部分,查找数组的实际的长度,用来向系统申请空间大小。
    所以说,系统会优先查看数组声明部分的容量,再去查看数组实际定义的长度来申请内存空间。如果声明和定义都没有约定数组的容量,那么导致编译报错。
  2. 当数组的容量使用一个变量去声明的时候,则此时不能定义数组。因为变量的值可能发生改变,当数组使用变量去声明长的时候,系统肯定不会知道数组的确切长度是多少,此时如果给该数组做了明确的定义,可能导致定义的长度比实际数组容量要大。所以系统禁止使用变量声明容量的时候同时去定义该数组。
3 数组的访问

数组名[数组元素位置];

示例:
有一个数组int arr[5]={0,1,2,3,4};如要访问第1个元素和第2个元素,使其相加,导出结果:arr[1]+arr[2]==3 (数组的下标是从0开始计算的);

4 访问整个数据结构

访问整个数据结构这个思想,在所有数据结构中都是通用的,并且是所有功能的基础。
我们把访问整个数据结构的过程称作:遍历——对一个数据结构中的所有数据,全都并且仅访问一次。
所有数据结构都会面临如下课题:
数据结构的 增、删、改、查、排、遍历
数组名本身是一个地址,这个地址和该数组首元素的地址是一样的。

5 二维数组

int arr[m][n]; 表示二维数组有n列m行 即由m个有n个元素的一维数组组成。
示例: int arr[2][3]={{1,2,3},{4,5,6}};
逗号运算符: 可以用来将一个表达式隔开成若干个表达式,使得每一个表达式独立运算,但是整个表达式的值取最末尾表达式的值。

6 数组的排序:

①冒泡排序:逻辑最简单,代码也最简单,但是时间复杂度最高(效率最低)。
使用比较运算符,当发现两者之间的最大值出现,就立即进行换位。

②选择排序:比冒泡难一点,但是效率高。
使用比较运算符,查找出第一位置的元素并记录好下标,当遍历完毕后再把找到的元素进行换位。

③快速排序:代码难度最为高的一种排序方式 ,但是效率非常高。

7 字符数组

字符数组能够和整形数组一样的使用方式,但是字符数组有其特殊的使用方式。

7.1字符数组的声明及定义:

①如同其它数组一样定义:

char str[20]={‘h’,’e’,’l’,’l’,’o’};

②字符数组特有的定义方式:

char str[20]=”hello”;
7.2字符数组的使用:

①如同整型数组一样输入输出

char str[20]= {‘h’,’e’,’l’,’l’,’o’};
for(int i=0;i<5;i++)
{ scanf(%c”,&str[i]);printf(%c”,str[i]);}

②字符数组特有的输入输出

char str[20]= {0};
scanf(%s”,str);//scnaf中%d要求是int*类型,%c要求的是char*类型,%s要求的是char*类型,
printf(%s\n”,str);//scnaf中%d要求是int类型,%c要求的是char类型,%s要求的是char类型,

注意: 在字符数组中,系统默认会在每一个字符数组/字符串的结尾位置,加上结束符’\0‘(也就是空字符)。
由于以上特性,我们在设计字符数组的时候,最大容量最低要求要比实际长度多1.

7.3字符数组的函数:
#include<string.h>

strlen,用来测量一个字符数组的实际长度,
参数列表:目标字符数组
返回值:返回字符串的长度。

strcpy(s1, s2);,用来实现字符数组的拷贝,
功能:复制字符串 s2 到字符串 s1。是字符数组/字符串之间唯一的相互赋值的方法。使用该函数的时候,目标字符数组尽量比源字符的容量要大。

strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。是比较ascii的值。返回的是两者的差值

strcat,用来拼接两个字符数组/1个字符数组和1个字符串
参数列表:字符数组1,字符数组2/字符串
返回值:将更新后的“字符数组1”返回

strtok,用来分隔字符串
参数列表:待分隔的字符串,分隔字符串
返回值:分隔后取出来的第一个字符串;

memcpy用法:
参数列表:目标指针,源指针,需要复制的数量
函数功能:将源指针上的内容,复制到目标指针指向内存空间上,复制的内存空间大小,为第三个参数。
返回值:将更新后的目标指针返回。

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值