Lo que pasa es que estoy iniciándome en el tema de los arreglos bidimencionales de el libro de deitel y ahorita estoy viendo solo ejemplos y no he hecho muchos ejercicios aun, pero todos los ejemplos que veo los hago tambien ya que aprendo mas escribiendolos...
y sucede por ejemplo que el prototipo y definición de una función cualquiera especifica que va a recibir como parámetro un arreglo bidimensional de la forma const int a[][3]
ejemplo:
Código:
El programa se ejecuta pero el compilador marca algunos errores como por ejemplo:#include <stdio.h> void despliegaArreglo(const int a[][3]); //despliega los elementos del arreglo int main() { int arreglo1[2][3] = {{1,2,3},{4,5,6}}; int arreglo2[2][3]= {1,2,3,4,5}; int arreglo3[2][3]= {{1,2},{4}}; despliegaArreglo(arreglo1); despliegaArreglo(arreglo2); despliegaArreglo(arreglo3); return 0; } void despliegaArreglo(const int a[][3]) { int i; int j; for(i = 0; i < 2; i++){ for(j = 0; j < 3; j++){ printf("%d ", a[i][j]); } printf("\n"); } }
[Warning] passing argument 1 of 'despliegaArreglo' from incompatible pointer type [enabled by default]
[Note] expected 'const int (*)[3]' but argument is of type 'int (*)[3]'
Esto lo solucione precediendo los arreglos locales de main con const, no se si el error es por culpa del compilador o si es error mio pero el ejemplo esta así en el libro...
Otro detalle es que solo me pasa con arreglos bidimencionales...
Hasta el momento solo se que const se usa solo para hacer constante el arreglo y evitar que una función la modifique, tampoco se profundizo mucho en el concepto por lo que necesito aclararme un poco mas esto, ya que no comprendo por que sucede esto con los arreglos bidimencionales y con los de un subindice no.
la otra duda que tengo la explicare de manera de resumen;
int arreglo[2][3] = {1,2,3,4,5,6}; //declaro un arreglo en main
la paso a una función que especifica en el parámetro que a arreglo la precederá un "const"
Código:
//en esta funcion se llama a otra función que recibe el mismo parámetro pero sin "const"void funcion(const int a[][3])
Código:
El programa se ejecuta pero el compilador marca el siguiente error:ordenamBurbuja(a);
[Warning] passing argument 1 of 'ordenamBurbuja' discards 'const' qualifier from pointer target type [enabled by default]
por lo que supongo (en ambos casos)que es incorrecto hacer esto aunque el programa corra bien...
les agradecería que me pudieran ayudar un poco ya que no encuentro lo que busco en internet