C语言第九章:数组
Posted 歌咏^0^
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言第九章:数组相关的知识,希望对你有一定的参考价值。
一、数组的概念
由相同类型的多个元素所组成的一种复合数据类型
二、什么时候会用到数组
在工程中同时定义多个相同类型的变量时,定义多次会非常麻烦,可以考虑使用数组
三、格式:
类型说明符 数组名[整型常量表达式];
"类型说明符": 指定数组元素的类型,任意C语言合法的类型都可以。
"数组名": C语言标识符,其值为该数组的首地址(常量)。
"整型常量表达式":指定数组元素的个数。
eg:
int a[10];
元素的数据类型 数组的名字[元素的个数];
比如:int array[5];//定义一个数组array,该数组一共有五个元素,每个元素都是int类型
注意: 元素的个数 不要使用 变量,不同处理器处理结果不同,很多编译器 都会给你报错
#include<stdio.h>
int main(void)
{
//分开定义
int a,b,c,d,e;
//使用数组定义
int array[5];
return 0;
}
四、特点
1)数组中所有的元素(变量)类型都是一致的
2)数组申请的内存是连续的。从低地址到高地址依次连续存放数组中的每个元素。
五、一维数组元素的引用
数组名[下标]
"下标":C语言下标是从0开始,下标必须为>=0的整数。
a[0]、a[1]、a[2]....a[9]
引用数组元素a[i]跟普通变量一样,即可以作为左值,也可以作为右值。
下标的最小值为0,最大值为 元素个数-1
“下标越界”:理论上可用,但当他覆盖重要数据的内存时,使程序崩溃
六、一维数组的赋值
1、定义的时候初始化
比如: int array[5] = {1,2,3,4,5};
--->语法正确,如果对全部数组元素赋初值,那可以不指定数组长度
(1)、赋值的时候,成员之间使用逗号隔开;赋值的成员的数据类型要与数组定义的数据类型一致
(2)、初始化列表的时候,个数小于或者等于长度
int array[5] = {1,2,3};---->语法正确
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 0;
array[4] = 0;
如果是定义的时候初始化,但是初始化列表个数小于数组的大小,那么无论这个数组是全局变量还是局部变量,没有赋值的成员都是为0
int array[3] = {100,200,300,400};//错误,越界访问没有申请到的空间
2、先定义,没有初始化 ---》全局变量为0,局部变量为随机值
int array[3];//局部变量 所有元素是随机值,全局变量所有元素的值为0
3、清空数组
int array[5] = {0}; //表示给array数组中第0个元素赋值为0,后面所有元素都会默认为0
一维数组的名字 代表 首元素的地址
七、二维数组
1、概念
其实就是一维数组的集合
int buf[5][3]:
第一种解释:
定义一个二维数组,该数组由五个一维数组组成,分别是:
buf[0] buf[1] buf[2] buf[3] buf[4]
每个一维数组由3个元素组成,所以该二维数组一共由15个元素
第二种解释:
该数组一共由五行,每行由三个元素组成(也就是五行三列)
char buf[5][6]
2、二维数组在内存中的存放:
按行存放,即先顺序存放第一行的元素,再存放第二行的元素...
3、二维数组元素的引用
数组名[第几行][第几列]
4、二维数组的初始化
(1)分行给二维数组赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)将所有数据写在一个花括号内,按数组的排列顺序对各元素赋初值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)对部分元素赋初值,其余的元素自动置0
int a[3][4]={1,2,3};
int a[3][4]={0};
(4)如果对全部元素赋初值,则定义数组时可以对第一维的长度省略,
但第二维的长度不能省略。
int a[][4]={1,2,3,4,5,6,7,8,9,10};
5、注意:二维数组的名字其实也是地址,代表最大个元素类型的首地址
八、字符数组
字符数组,数组元素是char(字符型)的数组,它可以是一维数组,也可以是二维数组。
字符串常量:储存在虚拟内存的数据段
1、定义的时候赋值
char c1[]={'c','h','i','n','a'};
char c2[]={"china"};
两者有什么区别?
char c2[]={"china"};
<==>char c2[]={'c','h','i','n','a','\\0'};
字符串保存在内存中时会在末尾加一个终止符'\\0','\\0'的ASCII码就是0。
终止符的作用是用来标志字符串的结束。
我们在进行操作字符串时都是代入字符串的首地址,正因为每个字符串都有一个终止 符,系统才知道字符串的具体范围。
字符数组名是一个常量,其值为保存的字符串的首地址。
2、如果字符数组在定义的时候没有赋值,只能通过元素单个赋值或者字符串操作函数进行赋值
string[0] = 'h';
string[1] = 'e';
strcpy(string,"hello");
特别注意:这种写法是错误的:
char string[6];
string[6] = "hello";//错误
string = "hello";//也是错误的
原因:数组元素的访问只能是通过单个元素进行的,所以string[6]是错误的;数组的名字经过编译之后其实就是一个地址,也就是常量(比如可能是0x00ff110f),所以给一个地址赋值是错误的,string = "hello";//也是错误的
char string[3][10] = {{ },{ },{ },{ }};
char string [3][10] = {"hello","world","www"};
char *string[3] = {"hello","world","www"};
九、字符串操作函数
1、字符串的拷贝 string copy -----strcpy
头文件
#include <string.h>
定义函数
char *strcpy(char *dest, const char *src);
函数的作用:
字符串的拷贝,将src字符串 拷贝到dest
参数:
dest:目标字符串
src : 源字符串
2、字符串的比较 string compare----->strcmp
3、测量字符串的长度 string length -----strlen
char str1[100] = "hello";
int length = strlen(str1);
printf("length:%d\\n",length); //length:
注意:strlen--->测试的字符串长度 不包括 '\\0'
以上是关于C语言第九章:数组的主要内容,如果未能解决你的问题,请参考以下文章