目录
二维数组的简单介绍
之前的文章谈到了一维数组,和一些使用技巧,这里来聊一聊二维数组
先来看看我们假想中的一维数组
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3]={0};
return 0;
}
那么我们眼中的认为数组是
那么二维数组就应该是这样的
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3][2];
return 0;
}
二维数组分行和列,例如这是三行两列的一个二维数组,期中每个元素都是Int型
当然,你也可以这样创建二维数组
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
char arr[3][2];
return 0;
}
这样就创造了一个char型的二维数组,其中二维数组里面每一个元素均为char型
二维数组的初始化
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3][2] ={1,2,3,4,5,6};
return 0;
}
按下F10调试一下
大家可以看到二维数组里的内容,用我们想象的图来表示就应该是这样
不完全初始化
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3][2] ={1,2,3,4};
return 0;
}
后续未初始化的补0
从调试窗口可以直接看出来 ,如果是字符数组,那么后面补的应该是‘\0’
再看另一种初始化
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3][2] = { {1},{2},{3} };
return 0;
}
调试一下,查看数组内部到底是放了什么
把一个二维数组当作及格一维数组,也就是说,如果你需要单独个二维数组中的每一行赋值,可以使用这种方法
当然我可以更改一下代码
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3][] = { {1},{2},{3} };
return 0;
}
这是二维数组中错误的省略方式,
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[][2] = { {1},{2},{3} };
return 0;
}
这样却可以完美运行,通过这样两段代码,大家又懂了什么,初始化二维数组中行可以省略,但是列是不能省略的。
原因的话,我会在文章稍后进行讲述
二维数组的使用
使用之前使用的代码
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int arr[3][2] ={1,2,3,4,5,6};
return 0;
}
二维数组和一维数组类似,都可以通过下标来进行访问,可以理解为数学中的x,y轴
假设我想输出数组中的3,3在数组的第二行,第一列中
那如果想全部打印就应该这样做——灵活使用for循环
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int i, j;
int arr[3][2] = { 1,2,3,4,5,6 };
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
printf("%d",arr[i][j]);
}
printf("\n");
}
return 0;
}
这段代码可能会让初学者有些难以理解,这里简单解释一下,i表示行,j表示列
i=0时,j=0之后i=0,j=1这样通过两个for循环使用二维数组
内存中的二维数组
那么大家看一下二维数组在电脑内存中的储存,当然这里的代码只需要大家了解就行,之后在我讲述指针之后回头来看这段代码应该会很清楚。这里就简单介绍一下在电脑内存中二维数组如何储存
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
#include<string.h>
int main() {
int i, j;
int arr[3][2] = { 1,2,3,4,5,6 };
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
printf("arr[%d][%d]=%p",i,j,&arr[i][j]);
}
printf("\n");
}
return 0;
}
在电脑内存中,属猪以16进制的方式储存,从这里可以清晰的看出,arr[0][0]和arr[0][1]相差4
后续的相邻的数组也是相差4。这里我来给大家解释一下原因,因为数组是int型,所以每个数组中的元素在内存中占了4个字节。
回到之前谈到过的问题,为什么二维数组中可以省略行不能省略列。
这里画一下这段代码在计算机真正储存时的空间
他其实在内存中是横向排列的,假设你不定义列数,也就是没有定义一行有几个数话,计算机就无法无法确定列数,就形成不了二维数组
以上就是二维数组的所有知识点了,希望大家在接近期末能在看完这篇文章后完全了解二维数组