La diferencia entre el puntero de matriz y la matriz de puntero

Requisito previo: los
punteros de matriz son punteros Los punteros de matriz
son matrices

Ejemplo:

int *p1[5];

con

int (*p1)[5];

El primero es una matriz de punteros y el segundo es un puntero de matriz.

Involucra la prioridad de los operadores: el subíndice de matriz [] tiene una prioridad más alta que el operador de valor *. Combinar de derecha a izquierda. Primero combine el subíndice de matriz [].

Hablemos primero de las matrices de punteros:

int *p1[5];

Variable de puntero que apunta a datos enteros. 0 1 2 3 4 (int *)
** Conclusión: ** La matriz de punteros es una matriz, y cada elemento de la matriz almacena una variable de puntero.
Ejemplo de código:

#include <stdio.h>
int main()
{
    
    
int a=1;
int b=2;
int c=3;
int d=4;
int e=5;
int *p1[5]={
    
    &a,&b,&c,&d,&e};
int i;

for(i=0;i<5;i++)
{
    
    
printf("%d\n",*p[i]);
}
return 0;
}

Esta sección es más o menos similar al cuerpo del bucle de salida de la matriz.

for(i=0;i<5;i++)
{
    
    
printf("%d\n",*p[i]);
}

Simplemente reemplace el nombre de la matriz con una variable de puntero. Entonces, la matriz de punteros sigue siendo una matriz.

Las matrices de punteros son muy convenientes de usar en cadenas (se pueden usar matrices bidimensionales)

Después de la inicialización (comillas dobles en la cadena), salida. Tenga en cuenta que si la cadena se envía a la dirección, no es necesario presionar *. Este símbolo de valor se escribe directamente como p [i]

Puntero de matriz

int (*p1)[5];

La variable de puntero p1 apunta a toda la matriz, 0 1 2 3 4 (int), y el tipo de datos son datos enteros.

Conclusión: el puntero de matriz es un puntero, apunta a una matriz.

Ejemplo de código:

#include <stdio.h>
int main()
{
    
    
int temp[5]={
    
    1,2,3,4,5};
int (*p)[5]=&temp;
int i;

for(i=0;i<5;i++)
{
    
    
printf("%d\n",*(*p+i));
}
return 0;
}

Recuerde no inicializar así:
int (* p) [5] = {1,2,3,4,5}; El
compilador no reportará un error pero el contenido de salida es incorrecto.

Lo mismo ocurre con los punteros de matriz. Cuando se define como char, la salida no se agrega *

Supongo que te gusta

Origin blog.csdn.net/yooppa/article/details/112980820
Recomendado
Clasificación