一、我们先来看一看二维数组有哪些常见的表示方法:
int main()
{
int arr[4];
int brr[3][4];
int crr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int drr[3][4] = {1,2,3,4,5,6,7,8,9,10};//*****
int err[][4] = {1,2,3,4,5,6,7,8,9,10};
int brr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
brr[2][2] = 100;
}
二、对比一维数组和二维数组的数据类型
一位数组:
int arr[4]; | 数据类型 |
---|---|
arr | int *x; |
arr+1 | int *x; |
arr[0] | int x; |
arr[0]+1 | int x; |
二维数组:
int brr[3][4]; | 数据类型 |
---|---|
brr | int (*x) [4]; |
brr+1 | int (*x) [4]; |
brr[0] | int *x; |
brr[0]+1 | int *x; |
brr[0][0] | int x; |
brr[0][0]+1 | int x; |
三、几个易混概念辨析:
- int (*x) [4]; 指向数组的指针,简称数组指针。
- int *x [4]; 保存指针的数组,简称指针数组。
- int *f (0); 返回值为指针的函数,简称指针函数。
- int (*f) (); 指向函数的指针,简称函数指针。
四、关于二维数组的一个简单示例
矩阵的逆置
将 brr 矩阵逆置到 crr 中
#include <stdio.h>
#include <string.h>
void Show(int (*brr)[4])
{
printf("sizeof(brr)=%d\n",sizeof(brr));
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
}
int main()
{
int brr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
brr[2][2] = 100;
int *p = brr[0];//ok
int crr[4][3];
//将brr矩阵逆置到crr中
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
crr[j][i] = brr[i][j];
}
}
printf("---------------\n");
for(int i=0;i<4;i++)
{
for(int j=0;j<3;j++)
{
printf("%d ",crr[i][j]);
}
printf("\n");
}
return 0;
}