十一、数组(1)
1.数组
数组:一组相同类型元素的集合
数组元素类型 数组名 [元素个数](常量) = {......}
例:int arr [10] = {1,2,3};
不完全初始化,剩下元素默认为0。
""
字符串数组:末尾自带\0 {.....,'\0'}
{.....,0}
2.一维数组
一维数组使用下标访问数组每个元素,一维数组的元素在内存中是连续存放的,数组名是首元素的地址。地址是动态变化的
一维数组在内存中的存储
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//一维数组在内存中的存储
int main()
{ int arr [] = {1,2,3,4,5,6,7,8,9,10};int sz = sizeof(arr)/sizeof(arr[0]);int i = 0;for(i=0;i<sz;i++){printf("&arr[%d]=%p\n",i,&arr[i]);}return 0;
}
3.二维数组
二维数组的创建和初始化
例:int arr [3] [4] = {1,2,3,4,5};//三行四列
1 2 3 4
5 0 0 0
0 0 0 0
int arr [3] [4] = {{1,2,3},{4,5}};
1 2 3 0
4 5 0 0
0 0 0 0
二维数组初始化可以省略行,不能省略列。
行相当于有几个一维数组,列相当于这些一维数组有几个元素。
例:int arr [ ] [4] = {{1,2,3,4},{5,6,7,8}};
1 2 3 4
5 6 7 8
通过下标访问二维数组的元素,行和列都是从0开始的。
(1)二维数组
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//二维数组
int main()
{ int arr [3][4] = {{1,2,3,4},{5,6,7,8}};int i = 0;int j = 0;for(i=0;i<3;i++){for(j=0;j<4;j++){printf("%d ",arr[i][j]);}printf("\n");}return 0;
}
(2)二维数组在内存中的存储
二维数组的元素在内存中排列是,从左到右,从上到下原则。
二维数组可看作是多个一维数组的拼接
例:arr [0] [i] //第一行
arr [1] [i] //第二行
arr [2] [i] //第三行
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
//二维数组在内存中的存储
int main()
{ int arr [3][4] = {{1,2,3,4},{5,6,7,8,}};int i = 0;int j = 0;for(i=0;i<3;i++){for(j=0;j<4;j++){printf("&arr[%d][%d]=%p ",i,j,&arr[i][j]);}printf("\n");}return 0;
}