基础使用
先遍历行再遍历列
#include<stdio.h>
//二维数组的基本使用
int main()
{//二维数组的初始化int arr1[2][2]={{2,2},{0,0}};int arr2[2][3]={2,2,2,8,8,8};int arr3[6][9];int i,j;for(i=0;i<6;i++){for(j=0;j<9;j++){arr3[i][j]=1;}}arr3[2][5]=0;//打印printf("arr1:\n");for(i=0;i<2;i++){for(j=0;j<2;j++){printf("%d ",arr1[i][j]);}printf("\n");}printf("arr2:\n");for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%d ",arr2[i][j]);}printf("\n");}printf("arr3:\n");for(i=0;i<6;i++){for(j=0;j<9;j++){printf("%d ",arr3[i][j]);}printf("\n");}getchar();return 0;
}
内存布局
元素的地址连续分布,每一个元素在前一个的基础上加4(int)
#include<stdio.h>
//二维数组的内存布局
int main()
{//二维数组的初始化int arr[2][2]={{2,2},{0,0}};int i,j;//打印printf("arr1:\n");for(i=0;i<2;i++){for(j=0;j<2;j++){printf("%d ",arr[i][j]);}printf("\n");}//打印首地址printf("arr的首地址:%p\n",arr);printf("arr[0]的地址:%p\n",arr[0]);printf("arr[0][0]的地址:%p\n",&arr[0][0]);//打印所有地址printf("所有地址:\n");for(i=0;i<2;i++){for(j=0;j<2;j++){printf("arr[%d][%d]的地址:%p\t",i,j,&arr[i][j]);}printf("\n");}getchar();return 0;}
//输出:
//arr1:
//2 2
//0 0
//arr的首地址:0055F7F0
//arr[0]的地址:0055F7F0
//arr[0][0]的地址:0055F7F0
//所有地址:
//arr[0][0]的地址:0055F7F0 arr[0][1]的地址:0055F7F4
//arr[1][0]的地址:0055F7F8 arr[1][1]的地址:0055F7FC
行和列
#include<stdio.h>
int main()
{int arr[2][3]={{2,6,8},{3,0,1}};//sizeof(arr):2x3x4=24 整个二维数组的字节//sizeof(arr[0]):3x4=12 第一行的字节//行:int row=sizeof(arr)/sizeof(arr[0]);//24/12=2//列://sizeof(arr[0]):3x4=12 第一行的字节int col=sizeof(arr[0])/sizeof(int);//12/4=3printf("行:%d 列:%d",row,col);getchar();return 0;
}
案例:计算平均成绩
方式1:
#include<stdio.h>
int main()
{double student[3][5];int row=sizeof(student)/sizeof(student[0]);int col=sizeof(student[0])/sizeof(double);int i,j;double s1=0,s2=0,s3=0,s=0;for(i=0;i<row;i++){for(j=0;j<col;j++){scanf("%lf",&student[i][j]);s+=student[i][j];}}for(j=0;j<col;j++){s1+=student[0][j];s2+=student[1][j];s3+=student[2][j];}printf("所有班的平均成绩:%.2f\n",s/(row*col));printf("1班的平均成绩:%.2f\n",s1/col);printf("2班的平均成绩:%.2f\n",s2/col);printf("3班的平均成绩:%.2f\n",s3/col);getchar();//entergetchar();return 0;
}
方式2:
#include<stdio.h>
int main()
{double student[3][5];int row=sizeof(student)/sizeof(student[0]);int col=sizeof(student[0])/sizeof(double);int i,j;double a=0,s=0;for(i=0;i<row;i++){a=0;for(j=0;j<col;j++){scanf("%lf",&student[i][j]);a+=student[i][j];s+=a;}printf("%d班的平均成绩:%.2f\n",i+1,a/col);}printf("所有班的平均成绩:%.2f\n",s/(row*col));getchar();//entergetchar();return 0;
}