KilluaZoldyck 2020-02-23
数组就是一些列具有相同类型的数据的集合,这些数据在内存中一次挨着存放,彼此之间没有缝隙。
我们可以将二维数组看作一个Excel表格,有行有列,length1 表示行数,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列。
二维数组在概念上是二维的,但在内存中是连续存放的,换句话说,二维数组的各个元素是相互挨着的,彼此之间没有缝隙。在线性内存中存放二维数组有两种方式:
1. 按行排列,放完一行之后再放入第二行
2. 按列排列,放完一列之后再放入第二列。
=================字符串结束标志(划重点)==========
字符串是一系列连续的字符的组合,要想在内存中定位一个字符串,除了要知道它的开头,还要知道它的结尾。找到字符串的开头很容易,知道它的名字(字符数组名或者字符串名)就可以了,然而如何找到字符串的结尾呢?
在C语言中,字符串总是以‘\0’作为结尾,所以‘\0’也被称为字符串结束标志,或者字符串结束符。
‘\0’ 是ASCII码表中的第0个字符,英文称为NUL,中文为:空字符。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。
在函数内部定义的变量、数组、结构体、共用体等都成为局部数据。在很多编译器下,局部数据的初始值都是随机的、无意义的,而不是我们通常认为的“零”值。这一点费非常重要。
char str[30] = { 0 }; // 将所有元素都初始化为 0 ,或者说是‘\0‘;
// 如果只初始化部分数组元素,那么剩余的数组元素也会自动初始化为“零”值,所以我们只需要将str 的 第 0 个元素 赋值为 0 ,剩下的而元素就都是0 了。
=====字符串长度====
在C语言中,我们使用 string.h 投文件中的strlen()函数来求字符串的长度,例如:
long len = strlen(strname);
注意: scanf() 在读取数据时需要的是数据的地址,这一点是恒定不变的,对于int char float 等类型的变量都要在前边添加 & 以获取他们的地址。但是在字符串或者数组名字使用过程中,一般都会转换为地址,再添加& 就是多此一举,甚至会导致错误。
就目前学习到的知识而言,int char float 等类型的变量用于 scanf() 时都要在前面添加& ,而数组或者字符串用于scanf() 时不用添加& ,他们本身就会转换为地址。
====C语言字符串处理函数====
C语言提供了丰富的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,使用这些现成的函数可以大大减轻我们的编程负担。
string.h 是一个专门处理字符串的投文件,它包含了很多字符串处理函数。
字符串连接函数 strcat() : 是string catenate 的缩写,意思是把连哥哥字符串连接在一起。语法格式为: strcat(arrayName1,arrayName2);
strcat() 将把arrayName2 连接到arrayName1 后面,并删除原来arrayName1 最后的结束标志‘\0‘.这意味着,arrayName1必须足够长,要能够同时容纳arrayName1 和arrayName2 ,否则就会越界(超出范围)。
strcat() 的返回值是arrayName1 的地址。
===字符串复制函数strcpy()====
= ===字符串比较函数strcmp()====
字符本身没有大小之分,strcmp()以各个字符对应的ASCII码值进行比较。strcmp() 从两个字符串的第0个字符开始比较,如果他们相等,就继续比较下一个字符,知道遇见不用的字符,或者到字符串的末尾。
如果两个字符串相同,则返回0;若arrayName1 大于arrayName2,则返回大于0的值,若小于,则返回小于0 的值。
==== C语言对数组元素进行排序(冒泡排序法)===
对数组元素进行排序的方法有很多种,比如:冒泡排序法、归并排序、选择排序、插入排序、快速排序等,其中最基本的就是冒泡排序法。
代码实现:
#include<stdio.h>
int main(){
int nums[10] = {4, 5, 2,10,7,1,8,3,6,9};
int i,j,temp;
// 冒泡排序法:进行 n - 1比较
......
}
}