Voglio foo() non modificare la matrice. Così ho dichiarato array in foo()
come const
const array [] [] come parametro formale in C - mancata corrispondenza
Se compilo questo codice, il compilatore si lamenta:
#include <stdio.h>
void foo(const int arr[5][5])
{
int i,j;
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
printf("%d\n", arr[i][j]);
}
}
}
int main()
{
int val = 0;
int i,j;
int arr[5][5];
for(i = 0; i < 5; i++)
{
for(j = 0; j < 5; j++)
{
arr[i][j] = val++;
}
}
foo(arr);
}
L'avvertimento è:
parametroallocate.c: In function 'main':
allocate.c:26:9: warning: passing argument 1 of 'foo' from incompatible pointer type
foo(arr);
^
allocate.c:3:6: note: expected 'const int (*)[5]' but argument is of type 'int (*)[5]'
void foo(const int arr[5][5])
^
Come altro posso dichiarare formale costante?
Non si vuole che 'foo()' sia ** in grado di modificare l'array? Perché foo non sta modificando l'array, lo sta solo leggendo. – moffeltje
http://stackoverflow.com/a/28062262/1606345 –
possibile duplicato di [passare un array bidimensionale a una funzione di parametro costante] (http://stackoverflow.com/questions/28062095/pass-a-two- dimensionale-array-a-una-funzione-di-parametro-costante) – 2501