Introducción al lenguaje C: "matrices unidimensionales a multidimensionales"

Prefacio

Array (el Array) es una secuencia ordenada de elementos, con el fin de facilitar el procesamiento, para formar una pluralidad de elementos con el mismo tipo de forma de orden organizado. Estas colecciones ordenadas de elementos de datos similares se denominan matrices .

Una matriz unidimensional

1. La creación de una matriz unidimensional

1.1 Creado en el área de pila

//方式一:显式声明法
int array[4]={
    
    1,2,3,4};//声明并定义一个含有4个整型元素的整型数组
//方式二:隐式声明法
int array[]={
    
    1,2,3,4};//同上

1.2 Creado en el área del montón

//在堆区开辟一个含有4个整型内存空间,并用一个整型指针指向该空间
int *array=(int *)malloc(sizeof(int)*4);

2. El uso de matrices unidimensionales

2.1 Notación de matriz

2.1.1 Obtención de elementos de matriz

int array[4]={
    
    1,2,3,4};
//采用下标索引
printf("array[0]=%d\n",array[0]);
printf("array[1]=%d\n",array[1]);
printf("array[2]=%d\n",array[2]);
printf("array[3]=%d\n",array[3]);
//采用遍历的方式
for(int i=0;i<4;i++)
{
    
    
	printf("array[%d]=%d\n",i,array[i]);
}

2.1.2 Valor de paso de la función de matriz

void print_array(int array[4])
{
    
    
	for(int i=0;i<4;i++)
	{
    
    
		printf("array[%d]=%d\n",i,array[i]);
	}
}
int main()
{
    
    
	int array[4]={
    
    1,2,3,4};
	print_array(array);
	return 0;
}

2.2 Notación de puntero

2.2.1 Obtención de elementos de matriz

int array[4]={
    
    1,2,3,4};
printf("a[0]=%d\n",*(array+0));//在编译过程中*(array+0)将转换成*(array+0*sizeof(int))
printf("a[0]=%d\n",*(array+1));//在编译过程中*(array+0)将转换成*(array+1*sizeof(int))
printf("a[0]=%d\n",*(array+2));//在编译过程中*(array+0)将转换成*(array+2*sizeof(int))
printf("a[0]=%d\n",*(array+3));//在编译过程中*(array+0)将转换成*(array+3*sizeof(int))
//遍历
for(int i=0;i<4;i++)
{
    
    
	printf("a[%d]=%d\n",i,*(array+i));
}

2.2.2 Valor de paso de la función de matriz

void print_array(int *array)
{
    
    
	for(int i=0;i<4;i++)
	{
    
    
		printf("a[%d]=%d\n",i,array[i]);
	}
}
int main()
{
    
    
	int array[4]={
    
    1,2,3,4};
	print_array(array);
	return 0;
}

3. El mapeo de matrices unidimensionales en la memoria

Inserte la descripción de la imagen aquí
La verificación del código es la siguiente

	int array[4]={
    
    1,2,3,4};
	printf("array[0]的地址为:%p\n",&array[0]);
	printf("array[1]的地址为:%p\n",&array[1]);
	printf("array[2]的地址为:%p\n",&array[2]);
	printf("array[3]的地址为:%p\n",&array[3]);
	

Los resultados de ejecución de VC6.0 son los siguientes

Inserte la descripción de la imagen aquí

Matriz bidimensional y multidimensional

对于一维数组,我们可以这样理解,一个小号水果篮子里面放着n个水果,而多维
数组,以二维数组为例,可以理解为——n个小号水果篮子,每个水果篮子里面放着n
个水果,而以三维数组为例,可以理解为——n个中号水果篮子,每个中号水果篮
子里面放着n个小号水果篮子,而每个小号水果篮子里面又放着n个水果...可以这么
说,n维数组套n层娃(俄罗斯套娃哈哈哈)

1. Creación de matriz multidimensional

1.1 Creado en el área de pila

int array[2][2]={
    
    {
    
    1,2},{
    
    3,4}};//创建一个二维数组
int array[2][2][2]={
    
    {
    
    {
    
    1,2},{
    
    3,4}},		//创建一个三维数组
					{
    
    {
    
    5,6},{
    
    7,8}}
				   };

Creado en el área del montón

//以二维数组为例
int **array=(int **)malloc(2*sizeof(int *));
for(int i=0;i<2;i++)
{
    
    
	array[i]=(int *)malloc(2*sizeof(int));
}

2. El uso de matrices multidimensionales

2.1 Notación de matriz

2.1.1 Obtención de elementos de matriz

//以二维数组为例
//采用下标索引
int array[2][2]={
    
    {
    
    1,2},{
    
    3,4}};
printf("array[0][0]=%d\n",array[0][0]);
printf("array[0][1]=%d\n",array[0][1]);
printf("array[1][0]=%d\n",array[1][0]);
printf("array[1][1]=%d\n",array[1][1]);
//采用遍历的方式
for(int i=0;i<2;i++)
{
    
    
	for(int j=0;j<2;j++)
	{
    
    
		printf("array[%d][%d]=%d\n",i,j,array[i][j]);
	}
}

2.1.2 Valor de paso de la función de matriz

void print_array(int array[2][2])//也可以写成int array[][2],但是不能写成int array[2][]
{
    
    
	for(int i=0;i<2;i++)
	{
    
    
		for(int j=0;j<2;j++)
		{
    
    
			printf("a[%d][%d]=%d\n",i,j,array[i][j]);
		}
	}
}
int main()
{
    
    
	int array[2][2]={
    
    {
    
    1,2},{
    
    3,4}};
	print_array(array);
	return 0;
}

2.2 Notación de puntero

2.1.1 Obtención de elementos de matriz

int **array=(int **)malloc(2*sizeof(int *));
for(int i=0;i<2;i++)
{
    
    
	array[i]=(int *)malloc(2*sizeof(int));
}
int num=1
for(int i=0;i<2;i++)
{
    
    
	for(int j=0;j<2;j++)
	{
    
    
		array[i][j]=num++;
	}
}
for(int i=0;i<2;i++)
{
    
    
	for(int j=0;j<2;j++)
	{
    
    
		printf("a[%d][%d]=%d\n",i,j,array[i][j]);
	}
}

2.1.2 Valor de paso de la función de matriz

void print_array(int (*array)[2])
{
    
    
	for(int i=0;i<2;i++)
	{
    
    
		for(int j=0;j<2;j++)
		{
    
    
			printf("a[%d][%d]=%d\n",i,j,array[i][j]);
		}
	}
}
int main()
{
    
    
	int array[2][2]={
    
    {
    
    1,2},{
    
    3,4}};
	print_array(array);
	return 0;
}

3. El mapeo de matrices bidimensionales en la memoria

Primero, echemos un vistazo a la estructura lógica de una matriz bidimensional, de la siguiente manera
Inserte la descripción de la imagen aquí
Pero, de hecho, el almacenamiento de memoria de una matriz multidimensional en la parte inferior es el mismo que el de una matriz unidimensional.

Inserte la descripción de la imagen aquí
La verificación del código es la siguiente

	int array[2][2]={
    
    {
    
    1,2},{
    
    3,4}};
	printf("array[0][0]的地址:%p\n",&array[0][0]);
	printf("array[0][1]的地址:%p\n",&array[0][1]);
	printf("array[1][0]的地址:%p\n",&array[1][0]);
	printf("array[1][1]的地址:%p\n",&array[1][1]);

Los resultados de ejecución de VC6.0 son los siguientes
Inserte la descripción de la imagen aquí

Tres, el uso real de matrices

Compilador-VC6.0

1. Use una matriz unidimensional para almacenar números enteros del 1 al 100 y sumarlos

int a[100]={
    
    0};//初始化为0
int sum=0;
for(int i=0;i<100;i++)//赋值
{
    
    
	a[i]=i;
}
for(i=0;i<100;i++)		//求和
{
    
    
	sum+=a[i];
}
printf("从1加到100的和为:%d\n",sum);

2. Impresión gráfica

int a[4][1]={
    
    {
    
    1},{
    
    2},{
    
    3},{
    
    4}};
for(int i=0;i<4;i++)
{
    
    
	for(int j=1;j<=a[i][0];j++)
	{
    
    
		printf("*");
	}
	printf("\n");
}

Los resultados son los siguientes
Inserte la descripción de la imagen aquí

int a[4][1]={
    
    {
    
    1},{
    
    2},{
    
    3},{
    
    4}};
for(int i=0;i<4;i++)
{
    
    
	for(int k=5;k>a[i][0];k--)
		{
    
    
			printf("*");
		}
		
	
	printf("\n");

}

Los resultados son los siguientes
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44672122/article/details/108520799
Recomendado
Clasificación