来自菜鸟的日程-------c语言基础篇7

《二维数组》
学习二维数组之前,先复习一下之前的吧:
/*’ -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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值