一、数组
1、概念
一组相同类型元素的集合
2、一维数组的初始化
int a[5] = {1, 2, 3}
说明:这个数组默认有五个数据元素,a[0] ~a[4]分别为1,2,3,0,0
#define N 10
int a[N]
3、一维数组的使用
#include <stdio.h>
int main(){
int arr[10] = {0};//数组的不完全初始化
//计算数组的元素个数
int sz = sizeof(arr)/sizeof(arr[10]);
//对数组内容赋值
int i = 0;
for (i=0; i<sz; i++){
arr[i] = i;
}
//输出数组的内容
for (i=0; i<sz; i++){
printf("%d", arr[i]);
}
return 0;
}
4、数组在内存中的存储
#include <stdio.h>
int main(){
int a[10] = {0};
int i = 0;
for (i=0; i<10; i++){
printf("a[%d] = %p\n", i, &a[i]);
}
return 0;
}
运行结果:
1)一维数组在内存中是连续存放的
2)随着数组下标的增长,地址是由高到低变化的
二、二维数组
1、二维数组的创建和初始化
1、二维数组的创建
//数组创建
int arr[3][4];
2、二维数组的初始化
//二维数组的初始化(三行四列)
int arr[3][4] = {1, 2, 3, 4,5,6,7,8,9,10,11,12};
int arr[3][4] = {{1, 2}, {3, 4}};//不完全初始化-后面补0
int arr[][4] = {{1, 2} , {3, 4}, {5, 6}};
a[0][0]:1/1/1 | a[0][1]:2/2/2 | a[0][2]:3/0/0 | a[0][3]:4/0/0 |
a[1][0]:5/3/3 | a[1][1]:6/4/4 | a[1][2]:7/0/0 | a[1][3]:8/0/0 |
a[2][0]:9/0/5 | a[2][1]:10/0/6 | a[2][2]:11/0/0 | a[2][3]:12/0/0 |
2、二维数组的使用
#include <stdio.h>
int main(){
int arr[][4] = {{1,2}, {3,4}, {4,5}};
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;
}
运行结果:
3、二维数组的存储
printf("arr[%d][%d] = %p\n", i, j, &arr[i][j]);
1)二维数组在内存中也是连续存放的,换行也是连续的
注意:数组名为首元素的地址,arr相当于&arr[0],但是有两个例外
1、sizeof(数组名):此时数组名表示整个数组,计算的是整个数组的大小
2、&数组名:表示整个数组,取出的是整个数组的地址
#include <stdio.h>
int main(){
int arr[10] = {0};
printf("%p\n", &arr);
printf("%p\n", &arr+1);
printf("%p\n", arr);
printf("%p\n", arr+1);
return 0;
}
运行结果: