Hola Ic4r0.
De modo general, un arreglo no es un apuntador. El segundo es una variable a la que se le puede asignar valores, incrementar, etc., mientras que el primero no.
Vg., es correcto:
Código C:
Ver original{
int *ip, v[5]={0,1,2,3,4};
ip = v; // ip -> v[0]
ip++; // ip -> v[1]
(*ip)++; // v[1] = 2
Pero no es así a la inversa:
Código C:
Ver original{
int *ip, v[5]= {0,1,2,3,4};
v = p // error
v++; // error
...
Sin embargo, cuando se envía un nombre de arreglo como parámetro, se está enviando la posición del primer elemento del mismo y dentro de la función es una variable local. Es decir que en este caso sí se trata de un apuntador.
Un ejemplo muy simple con tres formas de declarar el parámetro y modificar los valores de la matriz enviada como argumento en
C:
Código C:
Ver original#include <stdio.h>
// 1) como un arreglo de arreglos de 3 enteros
void init1(int [][3], int);
// 2) como un puntero a un arreglo de tres enteros
void init2(int (*)[3], int);
// 3) como un puntero al primer elemento del argumento
void init3(int *, int , int );
void showMat(int [][3], int);
int main() {
int m1[3][3] ,m2[3][3], m3[3][3];
init1(m1, 3);
init2(m2, 3);
init3(m3, 3, 3);
showMat(m1, 3);
showMat(m2, 3);
showMat(m3, 3);
return 0;
}
// 1)
void init1(int mt[][3], int rows) {
int c, r;
for(r=0; r<rows; r++)
for(c=0; c<3; c++)
mt[r][c] = 1;
}
// 2)
void init2(int (*mt)[3], int rows) {
int c, r;
for(r=0; r<rows; r++)
for(c=0; c<3; c++)
mt[r][c] = 2;
}
// 3)
void init3(int* mt, int cols, int rows) {
int c, r;
for(r=0; r<rows; r++)
for(c=0; c<cols; c++)
mt[r*cols+c] = 3;
}
void showMat(int mt[][3], int rows) {
int c, r;
for(r=0; r<rows; r++) {
for(c
=0; c
<3; c
++) printf("%3d", mt
[r
][c
]); }
printf("-------------------\n"); }
Saludos.