数组

来源:互联网 发布:vscode html自动补全 编辑:程序博客网 时间:2024/06/03 20:56

一 维 数 组

一、数组是一组有序数据的集合,用数组名和下标来唯一的确定数组中的一个元素。数组中的每一个元素都属于同一个数据类型。
1.一维数组的定义:
类型符 数组名[常量表达式];
示例: int a[10];
他表示定义了一个以为数组,数组名为a,次数组有10个元素。
2.数组的注意事项
(1)数组的命令规则和变量名相同,必须遵循标识符命名规则。
(2)在定义数组时一般需要定义数组的长度,方括号中的常量表达式就是用来表示数组的长度的。例如定义int a[10];代表数组中有10个元素,下标是从0开始的,所以10个元素分别是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9].
(3)常量表达式可以是常量或者符号常量,如int [1+2];是合法的,但是 int a[n];是非法的。所以数组是不允许对数组的长度做动态定义的。
示例:
#include<stdio.h>int main(){int n;scanf("%d",&n);int a[n];return 0;}

上面的程序试图企图在程序中临时输入数组的长度,是不可以的,运行结果如下:

但任何事情都不是绝对的 ,有时在自定义函数时你会看到如下代码:
void sum(int n){int [n*2];}

这种情况下是正确的 ,因为这是个自己定义的函数 ,n是主函数传进来的值,所以如果非主函数中可以这样定义,希望看到能理解这种写法。
3.数组元素的引用
在定义数组并且赋初值后就可以引用数组中的元素,应注意的事只能引用元素而不能一下引用整个数组。
引用数组的一般格式为
数组名[下标]
如a[0].代表数组中序号为零的元素,也就是第一个元素。
4.一维数组的初始化
(1)在定义时赋值
Int a [5] = {0,1,2,3,4};经过上面的初始化,a[0] = 0,a[1] = 1,a[2] = 2,a[3] = 3,a[4] = 4。
(2)也可一只给数组中的一部分赋值
Int a [5] = {0,1,2};经过上面的赋值,a[0] = 0,a[1] = 1,a[2] = 2,a[3] = 0,a[4] =0。
(3)对数组赋值后,由于元素的个数已经确定,所以可以 不用指定数组的长度。
int a[ ] = {1,2,3,4,5,6}; // 代表数组长度是6。
小练习:
/*对十个数组元素依次赋值为0、1、2.....9,并且按逆序输出。*/#include<stdio.h>int main(){int a[10] = {0,1,2,3,4,5,6,7,8,9};for(int i = 9;i>=0;i-- )printf("%d",a[i]);return 0;}

程序运行结果为:

二 维 数 组

1.二维数组的定义
一般形式为 类型说明符 数组名[常量表达式][常量表达式];
如:int a[3][4];//  注意不要写成int a[3],[4];
2.在C语言中可以把二维数组看成一个特殊的一维数组。如:
int a[3][4];可看成
a[0]——a[0][0]a[0][1]a[0][2]a[0][3]
a[1]——a[1][0]a[1][1] a[1][2] a[1][3]
a[2]——a[2][0]a[2][1] a[2][2] a[2][3]
虽说画的图看着像个矩阵,但是在内存中是顺序存放的,先存放第一行在存放第二行。
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)同样也可以对部分数组元素赋值,如:
int a[3][4] = {{1},{2},{3}}
这样赋值后各个元素如下:
1000
2000
3000
也可以对某个元素赋值,如:
int a[3][4] = {{1},{0,2},{9,10,11}};
赋值后各个元素情况如下:
1000
0200
910110
(4)如果对所有的元素都赋初值,则定义数组时可以不对第一维的数组赋值长度,但是第二维不可以不指定长度。如:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};等价于
int a[ ][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
小练习:
/*将一个二维数组的行和列互换,并存放到另一个数组。*/#include<stdio.h>int main(){int i,j;int a[2][3] = {0,1,2,3,4,5};int b[3][2];for(i = 0;i<2;i++ ){for(j = 0;j<3;j++)b[i][j] = a[j][i];printf("\n");}for(i = 0;i<3;i++ ){for(j = 0;j<2;j++){b[i][j] = a[j][i];printf("%d"a[i][j]);}printf("\n");}return 0;}

运行结果如下:

字 符 数 组

1.字符数组的定义
字符数组的定义和数值数组的定义差不多,如:
char a[2];
a[0] = 'a';a[1] = b;
2.字符数组的初始化
对比对数值数组的初始化我们可以得出对字符数组的初始化为:
char a[3] = {‘a’,‘b’,‘c’};
3.对字符数组的引用和数值型一样,其实在C语言中字符在内存中存放的本质是整形。所以字符很多时候可以和整形类型的量互换。
4.字符串和字符数组
在C语言中是将字符串当成字符数组来处理的,如:
#include<stdio.h>int main(){char a[15] = {'I','','a','m','','a','s','t','u','d','e','n','t','.'}int i;for(i = 0;i<=15;i++){printf("%c",a[i]);printf("\n");}return 0;}

这个就是用了一个一味的字符数组存放了一个字符串,往往有时候定义了数组的长度,我们并没有完全存放完,这时候我们需要知道数组的实际长度,这就用到了C语言的一个规定:在字符串的结尾加上一个字符串结束标志——’\0‘。所以以后只要看到了'\0'就代表字符串结束了,不管后面还有没有字符。我们经常会看到这种赋值方式:
char a[]= {"i am a student."};
也可省略括号直接写成
char a[]= "i am a student.";
这两种方式等价。这里需要注意的是这个字符串数组的长度不是15,而是16,因为系统会自动帮我们在结尾处加上'\0'。
5.字符串数组的输入输出
(1)逐个字符输出,如上面代码中的那种方法。
(2)整体输出。使用%s格式符,如:
char a[]= {"i am a student."};
printf("%s",a);
以后尽量使用这种方式,方便自己写,也方便别人读。
注意不要视图以这种方式输出元素:
printf("%s",a[1]);
另外一个需要注意的是输入字符串时不需要加&;如:
char a[];
scanf("%s",a);
不可写成:
scanf("%s",&a);
因为a是数组名本身就代表数组的地址,加上&是画蛇添足。



0 0