定义数组
数组就是在内存中连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
datatype arrayName[size];
int arr[10]={1,2,4,5};# 后面5个元素值为0
声明数组会在内存空间中开辟一个连续的空间
# include <stdio.h>//引用函数库
# include <stdlib.h>
void main(){
int a[5] = {1,2,3,4,5};
printf("%d",sizeof(a)); // 打印数组地址,sizeof(a)返回的是a所占的字节数
printf("\n%d",sizeof(a)/sizeof(int));//打印数组个数,sizeof(int)是返回int所占字节数。
printf("\n%x",a);//打印a的内存地址,%x是16位
for (int i =0;i <5;i++){//打印每一个元素的内存地址
printf("\na[%d]=%d a[%d]=%x", i, a[i],i,&a[i]);//&a[i]指的是a[i]的内存地址,而不是a[i]的值。
}
}
输出结果:
20//a的字节大小
5//a的元素个数
e4c46470//a的内存地址
a[0]=1 a[0]=e4c46470//第一个元素的地址
a[1]=2 a[1]=e4c46474//第二个元素的地址
a[2]=3 a[2]=e4c46478
a[3]=4 a[3]=e4c4647c
a[4]=5 a[4]=e4c46480
二维数组
初始化
1,循环初始化
# include <stdio.h>//引用函数库
# include <stdlib.h>
void main(){
int num[3][3];
for (int i=0;i <3; i++){
for (int j = 0; j<3;j++){
num[i][j] = i*3 +j +1;
printf("%-20d",num[i][j]);
}
printf("\n");
}
}
1 2 3
4 5 6
7 8 9
2,直接初始化
void main(){
int num[3][3]={1,2,3,4,5,6,7,8,9};
}
3,按列初始化
void main(){
int num[3][3]={{1,2,3},{4,5,6},{7,8,9}};
}
二维数组内存地址
# include <stdio.h>//引用函数库
# include <stdlib.h>
void main(){
int num[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
printf("num[%d][%d]_%x ",i,j,&num[i][j]);
}
printf("\n");
}
for (int i=0;i<3;i++){
printf("\nnum[%d]_%x ",i,&num[i]);
}
printf("\n");
printf("\nnum_%x",&num);
}
//数组的排序方式是先按行从左到右,再按列从上到下,依次排列
num[0][0]_87016e00 num[0][1]_87016e04 num[0][2]_87016e08
num[1][0]_87016e0c num[1][1]_87016e10 num[1][2]_87016e14
num[2][0]_87016e18 num[2][1]_87016e1c num[2][2]_87016e20
//没一行的地址是该行的起始位置地址
num[0]_87016e00
num[1]_87016e0c
num[2]_87016e18
//数组地址,是第一个元素的地址
num_87016e00