C语言之数组的学习心得

数组的学习心得

学习了本章的内容后,对数组有了一个大概的认识。对数组的了解可分为以下几个层次。

1.首先了解什么是数组

​ 数组就是分配一系列的内存空间,方便的把多个数值定义给一个变量,这个变量相当于一排房子,每间房间放一个数值,一个房间代表一个元素,房间里放的不一定是整数,也可以是小数,浮点数,字符等。房间上有门牌号,门牌号就代表了数组中的第几个元素,如a[10]就代表了数组从零开始数的第十一个元素。数组大大省去了为数值一个个赋变量的麻烦。

2.定义数组

定义数组的格式:dataType arrayName[length]

dataType 是数据类型, arrayName 是数组名称 ,length是数组长度

注:我们一般会通过for循环结构为数组的每个元素赋值,也会通过循环结构输出数组。

#include 
int main()
{
	int ha[10];
	int i;
    //从键盘输入整数赋值给数组中的每个元素
	for (i = 0; i<10; i++)
	{
		printf("请输入整数:");
		scanf("%d",&ha[i]);
	}
	//依次输出数组元素
	for (i = 0; i<10; i++)
	{
		printf("%d ", ha[i]);
	}
	return 0;
}

运行结果如下:

C语言之数组的学习心得_第1张图片

3.二维数组

(1)二维数组的定义:

dataType arrayName[length1][length2];

dataType 是数据类型, arrayName 是数组名称 ,length1是第一维下标的长度,length2是第二维下标的长度,可间接的将数组看成一个excel表格。

(2)二维数组的初始化:

初始化可按行分段赋值,也可按行连续赋值。在C中,二维数组是按行排列的。

按行分段赋值:int a[2][3]={{1,2,3},{2,3,4}};
按行连续赋值:int a[2][3]={1,2,3,2,3,4};

另外,二维数组初始化注意以下几点

(1)可以只对部分元素赋值,未赋值的元素的值为0。

(2)如果对全部元素赋值,那么第一维长度可以不给出。即全部元素个数除以第二维元素个数。

(3)二维数组可以看做是由一维数组嵌套而成的。

4.字符数组和字符串

用来存放字符的数组称为字符数组。字符数组实际上是一系列字符的集合,也就是字符串。在C中,通常就用一个字符数组来存放于一个字符串。

注意:字符数组只有在定义时才能将整个字符串一次性得赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。

例:char str[7];

str = “abc123”;//这是错误的写法

//应该为如下正确写法

str[0] = ‘a’; str[1] = ‘b’;…

字符串结束标志

在C中,字符串总是以’/0’作为结尾,所以’/0’也被称为字符串结束标志,或者字符串结束符。由“ ”包围的字符串会自动在末尾添加’/0’。所以字符数组的长度至少要比字符串的长度大1.

字符串长度

字符串长度就是字符串包含了多少个字符(不包括最后的’/0’)。在C中,我们使用string.h头文件的strlen()函数来求字符串的长度,用法如下:

length strlen(strname);

strname是字符串的名字。

5.字符串的输入和输出

字符串的输出

puts():输出字符串并自动换行,只能输出字符串。

printf():通过格式控制符%s输出字符串,不能自动换行。

#include 
int main()
{
	char str[] = "hello.lipanpan";
	printf("%s\n", str); //通过字符串名字输出
	printf("%s\n", "hello.lipanpan"); //直接输出
	puts(str); //通过字符串名字输出
	puts("hello.lipanpan"); //直接输出
	return 0;
}

运行结果为:
C语言之数组的学习心得_第2张图片

注意:输出字符串时只需要给出名字,不能带后边的【】。

字符串的输入

scanf():通过格式控制符%s输入字符串。

gets():直接输入字符串,只能输入字符串。

注意:scanf()和gets()还是有区别的,gets会把空格作为字符串的一部分,一起输入,只有碰到回车键才代表输入结束,而scanf()则是碰到空格键就代表输入结束。

举个简单例子:


```cpp
#include 
int main()
{
	char a[20],b[20];
	//用gets输入
	printf("请输入一串字符:");
	gets(a);
	//用scanf输入
	printf("请输入一串字符:");
	scanf("%s",b);
	printf("\n");
	printf("a:%s\n",a);
	printf("b:%s\n",b);
	return 0;
}

运行结果如下:
C语言之数组的学习心得_第3张图片

从该段程序中可以看出,我本想利用gets()和scanf()输入的内容一致,但是在运用scanf方法中,my后面敲了个空格,程序就认为我已输入完成。所以这个简单的例子很好的区分了这两个方法的区别。

int、char、float等类型的变量用于scanf()时都要在前面加&,而数组或字符串不需要,他们本身就会转换为地址。

6.字符串处理函数

使用其他字符串函数要包含头文件 string.h,这个头文件包含了很多字符串处理函数,是专门用来处理字符串的头文件。

字符串连接函数strcat()

功能:将两个字符串拼接在一起

格式:strcat(arrayName1,arrayName2);

讲解: strcat()把arrayName2连接到arrayName1后面,并删除原来arrayName1最后的结束标志“/0”。这意味着,arrayName1 必须足够长,要能够同时容纳 arrayName1 和 arrayName2,否则会越界(超出范围)。strcat() 的返回值为 arrayName1 的地址。

字符串复制函数 strcpy()

功能:将字符串从一个地方复制到另外一个地方。

格式:strcpy(arrayName1, arrayName2);

讲解: str2 复制到 str1 后,str1 中原来的内容就被覆盖了,strcpy() 要求 arrayName1 要有足够的长度,否则不能全部装入所拷贝的字符串。

字符串比较函数 strcmp()

功能:字符串的比较

格式:strcmp(arrayName1, arrayName2);

讲解:字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开 始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。

7.总结

数组是一系列相同类型的数据的集合,可以是一维的、二维的、多维的;最常用的是一维数组和二维数组,多维数组较少用到。

  1. 数组的定义格式为: type arrayName[length]

type 为数据类型,arrayName 为数组名,length 为数组长度。

需要注意的是:

1.数组长度 length 最好是常量表达式,如果 length 中包含了变量,在某些编译器下就会报错。

2.数组是一个整体,它的内存是连续的;

3.一般情况下,数组名会转换为数组的地址,需要使用地址的地方,直接使用数组名即可。

你可能感兴趣的:(C语言之数组的学习心得)