C 语言入门---第六章 C语言数组

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比较

  ......

  }

    

}

相关推荐