《二维数组》
学习二维数组之前,先复习一下之前的吧:
/*’ -123’–> -123
int My_atoi(const char *str)
{
assert(str!=NULL);
int flg=1;
while(*str==' ')
{
str++;
}
if(*str=='-')
{
flg=-1;
str++;
}
int num=0;//'123'---123 1=='1'-'0' 1*10+2
while(isdigit(*str))
{
num=num*10+*str-'0';
str++;
}
return flg*num;
}
int main()
{
char *str=" -123";
printf("%d\n",My_atoi(str));
return 0;
}
*/
/*小端判断:(复习)
int main()
{
int a=1;//0x00 00 00 01 但计算机存入是0x01 00 00 00(低地址存放低数据)
char *p=(char *)&a;//强转成char类型 访问a的首地址01(一个字节)
if(*p==1)//什么类型的指针 解引用就访问多大内存的数据(char类型一个字节)
{
printf("is little\n");
}
else
{
printf("is big\n");
}
}
*/
ok,现在进入二维数组啦~
/*二维数组初始化方式:可以省略行数,不能省略列数
int main()
{
int brr[2][3]={{1,2,3},{4,5,6}};//两行三列
int brr2[2][3]={1,2,3,4,5,6};
int brr3[2][3]={};//0
int brr4[2][3]={0};//0
int brr5[2][3];//0xcccccc
int brr6[][3]={1,2,3,4,5,6};
// brr6[2][]={1,2,3,4,5,6};//错误,编译器不会确定列数
//int brr[2][3]= arr;//错误,数组不能整体赋值,只能整体初始化一次机会
int brr7[][3]={1,2,3};//局部初始化,后面是0
*/
/*main 函数方式:
int main()
{
int brr[2][3]={1,2,3,4,5,6};
//先遍历行,再遍历列
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");//每行遍历完了以后再换行
}
return 0;
}
*/
//功能函数:
/*
void Show(int brr[2][3],int row,int col)//row:行的缩写,col:列的缩写
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
}
int main()
{
int brr[2][3]={1,2,3,4,5,6};
//二维数组的内存是连续的,二维数组是特殊的一位数组
//printf("%d\n",brr[1][0]);//4
//printf("%d\n",brr[0][3]);//4
//Show(arr,2,3);
//printf("%d\n",brr);//首地址
//printf("%d\n",brr+1);//第二行的地址
//printf("%d\n",*brr+1);//第一行第二个的地址
//printf("%d\n",*(brr+1));//第二行第一个的地址
//printf("%d\n",*(brr+1)+2);//[1][2]的地址
//printf("%d\n",&brr[1][2]);//[1][2]的地址
//printf("%d\n",*(*(brr+1)+2));//[1][2]的值
//printf("%d\n",*(brr[1]+2));//[1][2]的值
printf("%d ,%d\n",brr[1][0],brr[0][3]);//二维数组的内存是连续的,二维数组是特殊的一位数组
printf("%d ,%d\n",&brr[1][0],&brr[0][3]);
return 0;
}
*/
//int (*brr)[3] 数组指针
//int brr[3] 指针数组
/
void Show(int (*brr)[3],int row,int col)//row:行的缩写,col:列的缩写
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
}
int main()
{
int brr[2][3]={1,2,3,4,5,6};
//Show(brr,2,3);
int arr[3]={1,2,3};
printf("%d\n",arr);
printf("%d\n",arr+1);
printf("%d\n",arr[0]+1);
printf("=========");
printf("%d\n",brr);
printf("%d\n",brr+1);
printf("%d\n",brr[0]+1);//*(brr+0)+1
printf("%d\n",*(brr)+1);
return 0;
}
*/
#define ROW 5
void Show(int (*brr)[3],int row,int col)
{
for( int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
printf("%d ",brr[i][j]);
}
printf("\n");
}
}
//行列互换:
void Chage(int (*brr)[3],int (*crr)[2],int row,int col)
{
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
crr[j][i] =brr[i][j];
}
}
}
void Fun(int (*brr)[ROW])
{
int count=1;
for(int i=0;i<ROW;i++)
{
for(int j=0;j<ROW;j++)
{
if(i>j)
{
brr[i][j]=count++;
}
}
}
}
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 Fun2(int (*brr)[ROW])
{
srand(time(0));//随机种子
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[i][j]=brr[j][i];
}
}
}
}
/*测试代码:
int main()
{
int brr[ROW][ROW];
Fun2(brr);
Show2((int *)brr,ROW,ROW);
}
*/
int main()
{
int brr[2][3]={1,2,3,4,5,6};
int crr[3][2]={};
Chage(brr,crr,2,3);
Show2((int *)brr,2,3);
Show2((int *)crr,3,2);
return 0;
}