概述
相同数据类型的有序集合
数组元素地址连续
数组名为地址,是数组首元素的地址
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int arr[] = {10,20,30,40,50,60,70,80,90,100};
printf("arr = %p\n", arr);
printf("&arr[0] = %p\n", &arr[0]);
printf("&arr[1] = %p\n", &arr[1]);
printf("&arr[2] = %p\n", &arr[2]);
return 0;
}
运行结果:
arr = 0034F6D8
&arr[0] = 0034F6D8
&arr[1] = 0034F6DC
&arr[2] = 0034F6E0
数组大小、数组元素大小、数组元素个数
int main03(void) {
int arr[] = { 10,20,30,40,50,60,70,80,90,100 };
printf("数组大小:%u\n", sizeof(arr));
printf("数组元素大小:%u\n", sizeof(arr[0]));
printf("数组元素个数:%d\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
数组初始化
int arr0[10] = { 1,2,4 };//剩余未初始化的元素默认为0
int arr1[10] = {0};//将数组元素全部初始化为0
int arr2[10];//数组元素为内存实际值,随机值,可使用下标单个赋值,eg:arr[1]=6
int arr3[] = {1,2,4};//编译器按赋值自动获取数组元素个数
二维数组
一围数组的数组,数组元素是一围数组
- 打印二维数组
int main(void) {
int arr[2][3] = { {2,5,8},{7,9,5} };
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("arr[%d][%d]=%d\t", i, j, arr[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
arr[0][0]=2 arr[0][1]=5 arr[0][2]=8
arr[1][0]=7 arr[1][1]=9 arr[1][2]=5
- 数组大小、数组一维元素大小、数据元素大小、行数、列数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int arr[2][3] = { {2,5,8},{7,9,5} };
printf("数组大小:%d\n", sizeof(arr));
printf("数组一维元素大小:%d\n", sizeof(arr[0]));
printf("数组元素大小:%d\n", sizeof(arr[0][0]));
printf("数组行数:%d\n", sizeof(arr) / sizeof(arr[0]));
printf("数组列数:%d\n", sizeof(arr[0]) / sizeof(arr[0][0]));
return 0;
}
- 数组的地址=数组的首行地址=数组的第一个元素的地址
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int arr[2][3] = { {2,5,8},{7,9,5} };
printf("arr:%p\n", arr);
printf("arr[0]:%p\n", arr[0]);
printf("&arr[0][0]:%p\n", &arr[0][0]);
printf("&arr[0][2]:%p\n", &arr[0][2]);
printf("arr[1]:%p\n", arr[1]);
return 0;
}
运行结果:
arr:0026F7A8
arr[0]:0026F7A8
&arr[0][0]:0026F7A8
&arr[0][2]:0026F7B0
arr[1]:0026F7B4
- 初始化
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int arr[3][4] = { {2,7},{75,8},{26,37,9} };//未被初始化的数值为0
int arr1[3][4] = {0};//初始化元素全为0的数组
int arr2[][4] = {2,7,75,8,26,37,9};//编译器自动按声明的行列存放元素,一行满了再存下一行
int i, j;
int row = sizeof(arr ) / sizeof(arr[0]);
int col = sizeof(arr[0]) / sizeof(arr[0][0]);
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("====================\n");
int row1 = sizeof(arr1) / sizeof(arr1[0]);
int col1 = sizeof(arr1[0]) / sizeof(arr1[0][0]);
for (i = 0; i < row1; i++) {
for (j = 0; j < col1; j++)
{
printf("%d ", arr1[i][j]);
}
printf("\n");
}
printf("====================\n");
int row2 = sizeof(arr2) / sizeof(arr2[0]);
int col2 = sizeof(arr2[0]) / sizeof(arr2[0][0]);
for (i = 0; i < row2; i++) {
for ( j = 0; j < col2; j++)
{
printf("%d ", arr2[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
2 7 0 0
75 8 0 0
26 37 9 0
====================
0 0 0 0
0 0 0 0
0 0 0 0
====================
2 7 75 8
26 37 9 0