admin管理员组文章数量:1794759
C语言之数组的学习心得
数组的学习心得
学习了本章的内容后,对数组有了一个大概的认识。对数组的了解可分为以下几个层次。
1.首先了解什么是数组 数组就是分配一系列的内存空间,方便的把多个数值定义给一个变量,这个变量相当于一排房子,每间房间放一个数值,一个房间代表一个元素,房间里放的不一定是整数,也可以是小数,浮点数,字符等。房间上有门牌号,门牌号就代表了数组中的第几个元素,如a[10]就代表了数组从零开始数的第十一个元素。数组大大省去了为数值一个个赋变量的麻烦。
2.定义数组定义数组的格式:dataType arrayName[length]
dataType 是数据类型, arrayName 是数组名称 ,length是数组长度
注:我们一般会通过for循环结构为数组的每个元素赋值,也会通过循环结构输出数组。
#include <stdio.h> 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; }运行结果如下:
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 <stdio.h> int main() { char str[] = "hello.lipanpan"; printf("%s\\n", str); //通过字符串名字输出 printf("%s\\n", "hello.lipanpan"); //直接输出 puts(str); //通过字符串名字输出 puts("hello.lipanpan"); //直接输出 return 0; }运行结果为:
注意:输出字符串时只需要给出名字,不能带后边的【】。
字符串的输入scanf():通过格式控制符%s输入字符串。
gets():直接输入字符串,只能输入字符串。
注意:scanf()和gets()还是有区别的,gets会把空格作为字符串的一部分,一起输入,只有碰到回车键才代表输入结束,而scanf()则是碰到空格键就代表输入结束。
举个简单例子:
```cpp #include <stdio.h> 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; }运行结果如下:
从该段程序中可以看出,我本想利用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.总结数组是一系列相同类型的数据的集合,可以是一维的、二维的、多维的;最常用的是一维数组和二维数组,多维数组较少用到。
type 为数据类型,arrayName 为数组名,length 为数组长度。
需要注意的是:
1.数组长度 length 最好是常量表达式,如果 length 中包含了变量,在某些编译器下就会报错。
2.数组是一个整体,它的内存是连续的;
3.一般情况下,数组名会转换为数组的地址,需要使用地址的地方,直接使用数组名即可。
版权声明:本文标题:C语言之数组的学习心得 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686628428a88188.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论