一维数组
1.一维数组的定义:
一维数组定义方式如下
类型说明符 数组名【常量表达式】;
例子:
int a[10]; //整型数组a有10个元素
float b[10],c[20]; //实型数组b有10个元素,实型数组成有20个元素
char ch[20]; //字符数组ch有20个元素
注意:
不允许对数组的大小进行动态定义:(以下方法是错误的)
int ;
scanf("%d ",&n);
int a[n];//该定义数组的方式是错误的
2.一维数组初始化
一维数组定义并初始化的格式如下:
类型说明符 数组名【下标】= {初值列表} ;
注释:数组下标:C语言中下标是从0开始的,数组有n个元素,则最后一个元素的下标为n-1
数组 | 1 | 2 | 3 | 4 |
下标 | 0 | 1 | 2 | 3 |
(1)完全初始化
int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };
int arr2[5] = {0,0,0,0,0};
//等价于
int arr2[5] = {0};
(2)不完全初始化(给部分数组元素赋值,其余自动赋0)
int arr[5] = {6,8} ; //第一、第二个元素赋值为6,8,其余赋值为0
//输出结果 6,8,0,0,0
(3)当对所有数组元素赋初值时,可以不指定数组长度。
int arr[ ] = {1,2,3,4,5};//系统会自动定义数组长度为5
//其等价于
int arr[5] = {1,2,3,4,5}
【例题】
对10个数组元素一次赋值为0、1 、2 、3 、4 、5 、6 、7 、8 、9,要求进行逆序输出。
#include <stdio.h>
void main()
{
int i = 0;
int a[10] = {0};
for (i = 0; i <= 9; i++)
a[i] = i; //给数组各个元素赋值
for (i = 9; i >= 0; i--)
printf("%d ", a[i]); //输出数组各元素的值
printf("\n");
}
【输出结果】
9 8 7 6 5 4 3 2 1 0
二维数组
1.二位数组的定义
二维数组的定义方式:
类型说明符 数组名【常量表达式1】【常量表达式2】;
例子:
int a[3][6];
表示a为3 x 6(3行6列)的整型数组,一共存放12个整数。
2.二维数组的初始化
(1)按行给二维数组赋全值
- 按行分段初始化
int a[2][3]={{1,2,3},{4,5,6}};
- 按行连续初始化
int a [2][3] = {1,2,3,4,5,6};
- 可省略第一维长度,但第二维长度不能省略
int a [ ] [3] = {1,2,3,4,5,6};
- 所有值赋值为0
int b[2][3] = {0};
(2)对部分元素赋初值,未赋值元素自动取0。
int a[3][4]={{1,2},{3},{8}};
赋值后元素
1 | 2 | 0 | 0 |
3 | 0 | 0 | 0 |
8 | 0 | 0 | 0 |
字符数组
1.字符数组的定义
字符数组定义方式:
char 数组名【常量表达式】;
2.字符数组的初始化
(1)将字符逐个赋予字符数组中的各个元素
例子:
- char a[5] = {'H','e','l','l','o'};
a[0] | a[1] | a[2] | a[3] | a[4] |
H | e | l | l | o |
- char a[7] = = {'H','e','l','l','o'};
{}中 < 数组长度(元素个数),则只给前面的元素赋值,后面的元素自动赋值为'\0'。
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] |
H | e | l | l | o | \0 | \0 |
- char a[4] = = {'H','e','l','l','o'}; //语法错误
{}中 > 数组长度(元素个数),则按语法错误处理。
(2)使用字符串常量给字符数组赋初值
编译系统对由n个字符组成的字符串常量总是分配n+1个字节的存储空间
char a[6] = { 'Hello' };
//字符串存储在字符数组中末尾会存入'\0' ,即 { 'Hello\0'} —— 6个元素
或 char a[6] = 'Hello' ;
或 char a[ ] = 'Hello' ;
注释:定义字符串类型时,长度不能省略。
即 char str[ ] ; //错误定义