Hablando de Array Pointer y Pointer Array

Puntero de matriz y matriz de puntero

Matriz de punteros

int *arr1[10];
int **arr3[5];

Es esencialmente una matriz, pero los punteros se almacenan en la matriz.

Puntero de matriz

int(*arr4)[10];

Esencialmente un puntero, un puntero que puede apuntar a una matriz. Cómo usarlo, directamente en el código.

void print_arr1(int arr[3][5], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

void print_arr2(int (*arr)[5], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int arr[3][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	print_arr1(arr, 3, 5);
	print_arr2(arr, 3, 5);

	return 0;
}

  Print_arr1 y print_arr2 son dos métodos para usar punteros de matriz.
Analizar el significado del código

int main()
{
	//数组
	int arr[5];
	//指针数组
	int *parr1[10];
	//数组指针
	int(*parr2)[10];
	//指针数组的数组   数组中存放10个指针,这10个指针指向10个数组,这10个数组每个数组的大小是5
	int(*parr3[10])[5];

	return 0;
}

& Nombre de matriz VS nombre de matriz

Codificar directamente

int main()
{
	int arr[10] = { 0 };
	printf("%p\n", arr);
	printf("%p\n", &arr);
	return 0; 
}

Inserte la descripción de la imagen aquí
  A través de los resultados de la ejecución del código, parece difícil para nosotros encontrar la diferencia, pero de hecho el significado de las dos expresiones es diferente, lo que se puede verificar con el siguiente código.

int main()
{
	int arr[10] = { 0 };
	printf("%p\n", arr);
	printf("%p\n", &arr);
	printf("%p\n", arr + 1);
	printf("%p\n", &arr + 1);
	return 0; 
}

Inserte la descripción de la imagen aquí

  Al observar los resultados de la ejecución, encontramos que al agregar 1 a ambos, el resultado es diferente. El nombre de la matriz obtiene la dirección del primer elemento de la matriz. Cuando se agrega uno, se agrega el tamaño del tipo de datos y el el resultado se obtiene mediante & nombre de la matriz Al agregar una a la dirección de la matriz, sume el tamaño de la matriz Debido a que la matriz tiene 10 elementos en total, cada elemento tiene 4 bytes, por lo que se agregan 40 bytes.

Supongo que te gusta

Origin blog.csdn.net/weixin_43580319/article/details/111823415
Recomendado
Clasificación