1.一维数组
1.定义一维数组
1.数组的概念:我自己的理解就是用来存储数据的;
2.定义的格式:
数组类型 数组名[数组容量];
3.注意:
(1)数组名称就是变量的名称应当注意变量的命名规则;
(2)数组的类型可以任意给出;
(3)数组的容量一般是常量,指存入这个数组的个数,这个数必须是整数;
4.数组的长度是如何定义的呢
int 4字节
double 8字节
long 8字节
long long 8字节
int grade[8*10];
double name[50];
这两行代码中,第一行表示的是4*60字节,第二行是50*8个字节
C语言中还允许一行语句中可以存入多个数组变量:
比如:
int name[5],age[10];
2.访问数组元素
先来看一下案列:
#include <stdio.h>
int main(){
int num[5];
for (int i = 0; i < 5; ++i) {
num[i] = i;
}
for (int i = 0; i < 5; ++i) {
printf("%d ,",num[i]);
}
return 0;
}
运行结果如下:
D:\code\C\stu12.exe
0 ,1 ,2 ,3 ,4 ,
Process finished with exit code 0
for (int i = 0; i < 5; ++i) {
num[i] = i;
}
这三行就是循环遍历数组将数据一次放入数组之中;
for (int i = 0; i < 5; ++i) {
printf("%d ,",num[i]);
}
这三行就是将数组依次输出;
注意:
(1)索引必须是一个值,必须是整数的表达式,不要求是常量表达式,比如上面的代码中就是一个变量;
(2)索引的值大于0,并且小于数组的容量;
(3)数组的索引是从0开始的,到索引值-1;
(4)必须初始化数组,不然会产生下面的问题,
#include <stdio.h>
int main(){
int num[5];
// for (int i = 0; i < 5; ++i) {
// num[i] = i;
// }
for (int i = 0; i < 5; ++i) {
printf("%d ,",num[i]);
}
return 0;
}
运行结果如下:
D:\code\C\stu12.exe
1903257808 ,461 ,0 ,1 ,-141553664 ,
Process finished with exit code 0
1.数组初始化的三个形式(直接看代码):
//第一种方法,索引值小于数据容量,最后一个数据的后面可以加逗号也可以不加
int age[5]={1,2,3,4,5,};
//第二种方法:位数可以不够定义的容量,这时候会自动补全后面的数据,数据内容是0
int num1[5]={6,7,8};
//第三种方法;数组的容量可以不写
int num2[] = {9,10};
3.数组的存储形式
int地址值相差4
char地址值相差1
double地址值相差8
数组变量的值是该数组的第0个元素的地址值,即是数组的首地址
4.关于练习题等学到了数据结构之后在进行练习,到时候出一个专栏就是关于解决遇到的各种各样的有趣的问题
2.二维数组
1.定义格式:
数据类型 数组名称[ ][ ];
int num[5][5];
2.访问并定义二维数组
案列给一个二维数组赋值,并且输出赋值结果
#include <stdio.h>
#define row_size 5
#define col_size 6
int main(){
int array[row_size][col_size];
for (int i = 0; i <row_size ; ++i) {
for (int j = 0; j < col_size; ++j) {
array[i][j]=i*10+j;
}
}
for (int i = 0; i < row_size; ++i) {
for (int j = 0; j < col_size; ++j) {
printf("%2d\t",array[i][j]);
}
printf("\n");
}
return 0;
}
运行结果如下:
D:\code\C\stu12.exe
0 1 2 3 4 5
10 11 12 13 14 15
20 21 22 23 24 25
30 31 32 33 34 35
40 41 42 43 44 45
Process finished with exit code 0
这时候按照我的理解来解释一下代码;
(1)for (int i = 0; i <row_size ; ++i) {
for (int j = 0; j < col_size; ++j) {
array[i][j]=i*10+j;
}
这几行代码即是给数组赋值
首先当i=0的时候,进入到下面的循环,j逐层递加直到达到时col_size跳出循环,然后在进行外层循环直到达到数组容量时跳出循环;
后面的遍历额输出也是同上理;
3.初始化二维数组
1.形式1:
int num[3][4]={0,1,2,3,4,
5,6,7,8,9,10,11,};
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
printf("%d\t",num[i][j]);
}
printf("\n");
}
return 0;
运行结果如下:
D:\code\C\stu12.exe
0 1 2 3
4 5 6 7
8 9 10 11
Process finished with exit code 0
2.形式2:
int num[3][4]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12}};
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
printf("%d\t",num[i][j]);
}
printf("\n");
}
运行结果如下:
D:\code\C\stu12.exe
1 2 3 4
5 6 7 8
9 10 11 12
Process finished with exit code 0
3.形式三:
这个统一为数组一样,先初始话一部分,然后编译器会自动初始化剩下的
int num[3][4]={0,1,2,3,4};
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
printf("%d\t",num[i][j]);
}
printf("\n");
}
运行结果如下:
D:\code\C\stu12.exe
0 1 2 3
4 0 0 0
0 0 0 0
Process finished with exit code 0
4.形式4
二维数组同样的也可以不指定数组容量,但是仅仅限于一维数组不指定容量,也就是说第一个可以不指定,但是第二个必须指定
格式
int arry [][n] = {值1,值2,...};
关于数组后面的练习题,等到后面学习算法的时候在更新