二维数组知识及相关问题
二维数组的初始化
int arr[2][2]={{1,2},{3,4}};
int brr[2][2]={1,2,3,4};
int crr[][2] = {1,2,3,4,5};//列不能省略 1 2 3 4 5 0
int drr[2][2]={};//0
int err[2][2]={1};//1 0 0
// int frr[2][3]=arr;//error
二位数组的地址
printf("%d\n",brr);//272 首地址
printf("%d\n",brr+1);//284 加一行
printf("%d\n",brr[0]+1);//276 *(brr+0)+1 加一列
printf("%d\n",*(brr)+1);//276
指针访问二维数组的元素
printf("%d\n",brr);//首地址
printf("%d\n",brr+1);//加一行 第二行首地址
printf("%d\n",*brr+1);//加一列 第一行第二个地址
printf("%d\n",*(brr+1));&[1][0]
printf("%d\n",*(brr+1)+2);&[1][2]
printf("%d\n",&brr[1][2]);
printf("%d\n",*(*(brr+1)+2));[1][2]
printf("%d\n",*(brr[1]+2))[1][2]
打印二位数组的show函数
void Show(int brr[2][3],int row, int col)
{
for(int i = 0;i < 2;i++)
{
for(int j = 0; j < 2 ;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
void Show2(int *brr ,int row, int col)
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col ;j++)
{
printf("%2d ",brr[i*col+j])
}
printf("\n");
}
}
//上三角矩阵
void Fun(int (*brr)[Row])
{
int count = 1;
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < ROW;j++)
{
if(j>=i)
{
brr[i][j]=count++;
}
}
}
}
/对称矩阵
void Fun2(int (*brr)[Row])
{
srand(time(0));//time .h 随机种子
int count = 1;
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < ROW;j++)
{
if(j > i)
{
brr[i][j] = rand()%10+1;
}
else if(i == j)
{
brr[i][j] = 0;
}
else
{
brr[j][i] = brr[i][j];// stdilb.h [0,10)
}
}
}
}
int *brr[3]//指针数组 int (*brr)[列]//数组指针 等价于 二维数组
int *brr[3]//指针数针
杨辉三角
void Fun(int (*arr)[ROW])//杨辉三角
{
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j <= i;j++)
{
if(i == j||j == 0)
{
arr[i][i] = 1;
arr[i][0] = 1;
}
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
}
魔方阵
1、将1放在第一行中间一列;
2、从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1;
3、如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
4、当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
5、如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
void Magic_Aquare(int (*arr)[ROW])
{
int count = 1;
int i = 0;
int j = (ROW+1)/2;
arr[i][j] = count++;//先将1付给第一行的最中间的元素
while(count <= ROW*ROW)
{
if(i == 0 )判定如果在第一行就返回最后一行
{
i = ROW-1;
}
else
{
i = i-1;
}
if(j == ROW - 1)//如果在最后一列就返回第一行
{
j = 0;
}
else
{
j = j+1;
}
if(arr[i][j] !=0)
{
arr[i+1][j] = count++;//将数字按照规则赋值
}
else if(arr[i][j] == 0)
{
arr[i][j] = count++;
}
}
}