C语言多维数组
一.多维数组之一维数组
a).数组定义: 是一种分配内存的方法,分配的内存是多个类型相同的数据
b).数组的优点:能够大量一次性分配内存
c).数组的缺点:数据类型必须相同,因为有些场合需要数据类型不一样,必须一次性分配好,不能做到随时用随时分配
e).定义数组的语法格式:
元素数据类型 数组名[元素个数]={初始化表};
f).数组的特点:
1.数组分配的内存是连续的
2.数组名就是数组的首地址等于数组第0个元素的首地址
3.数组的长度也称数组元素的个数,而不是整个数组分配内存的大小
4.数组下标就是就是数组种元素的编号,又称索引号(index),下标从0开始
5.数组中元素的访问是通过[]和下标进行访问
6.越界非法访问会导致程序崩溃(写修改会导致程序崩溃,可能修改了Linux系统中的核心代码);
g).计算数组元素个数公式:
数组元素个数 = sizeof(数组名)/sizeof(数组的第0个元素);
#include <stdio.h>
int main(void){
//数组定义的形式
int a[5]={1,2,3,4,5}; //定义并初始化
int b[]={1,2,3,4,5}; //元素个数为5个
int c[5]; //定义未初始化,随机数
int d[5]={0}; //5个元素全是0
int e[5]={1,2}; //未初始化的为0
int f[5]={}; //5个元素全是0
int g[5]={1,2,3,4,5,6,7,8}; //将无效的元素省略,省略6,7,8
printf("5个元素的首地址:%p\n %p\n %p\n %p\n %p\n",
&a[0],&a[1],&a[2],&a[3],&a[4]);
int array[5]={1,2,3,4,5};
printf("array的首地址:%p\n",array);
printf("&array[0]的首地址:%p\n",&array[0]);
printf("array数组占用内存大小:%d\n",sizeof(array));
printf("array[0]占内存大小:%d\n",sizeof(array[0]));
printf("array数组长度:%d\n",sizeof(array)/sizeof(array[0]));
return 0;
}
变长数组
元素个数不定,不可初始化
#include <stdio.h>
int main(void){
int len;
sizeof("%d",&len);
int a[len]; //变量数组,元素个数不定,不可初始化
for(int index=0;index <len;index++){
*(a+index) = index; //先取地址,后算值
}
return 0;
}
二.多维数组之二维数组
由多个一维数组组成的数组,二维数组的每个元素是一个一维数组,二维数组的本质还是一个一维数组,只是形式上将一维数组再次分组而已
定义二维数组的语法:
元素数据类型 二维数组名[二维数组元素个数][一维数组元素个数]={初始化表};
计算二维数组的元素个数:
例如
#include <stdio.h>
int main(void){
int array1[2][2]={{1,2},{3,4}};
int array2[2][2]={0};
int array3[2][2];
int array4[][2]={{1,2},{3,4}}
int array5[2][2]={{1,2},{0}};
int array6[2][2]={1,2,3,4};
int a[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
int row=sizeof(a)/sizeof(a[0]);
int com=sizeof(a[0])/sizeof(a[0][0]);
//打印输出
for(int i=0;i<row;i++){
for(int j=0;j<com;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("二维数组每个元素的地址:\n %p\n %p\n %p\n"
"%p\n %p\n %p\n %p\n %p\n %p\n %p\n"
,&a[0][0],&a[0][1],&a[0][2],&a[0][3],&a[0][4],&a[1][0],
&a[1][1],&a[1][2],&a[1][3],&a[1][4]);
printf("二维数组a的首地址:%p\n",a);
printf("&a[0]的首地址地址:%p\n",&a[0]);
printf("&a[0][0]的首地址:%p\n",&a[0][0]);
printf("二维数组占用内存大小:%d\n",sizeof(a));
printf("二维数组第0个一维数元素占内存大小:%d\n",sizeof(a[0]));
printf("获取二维数组的长度:%d\n",sizeof(a)/sizeof(a[0]));
printf("获取二维数组第0个一维数组元素的长度:%d\n",
sizeof(a[0])/sizeof(a[0][0]));
return 0;
}
C语言函数