Progtwigción en C: ‘&’ con arreglos en scanf

Recibí una advertencia en mi progtwig, y ​​dice:

format '%c' expects argument of type 'char *' , but argument 2 has type 'char (*)[10]' [-Wformat]

Aquí está mi progtwig:

 #include int main() { char array[10]; scanf("%10c", &array); printf("%.10s", array); return 0; } 

La advertencia desaparece cuando elimino ‘&’ de scanf. Lo sé, es una matriz y no requiere y. ¿Pero no tienen el mismo efecto? Me refiero a que tanto ‘& array’ como ‘array’ dan la dirección de su primer elemento, ¿verdad? Si es así, ¿cuál es la diferencia aquí?

Leí algunas preguntas relacionadas aquí, y busqué mucho en Google. Se ha dicho que ‘& array’ es un puntero a una matriz de caracteres si ‘array’ es una matriz, mientras que ‘array’ en sí es un puntero a char. De acuerdo con lo que dice, ya que estoy usando% c, creo que se debe pasar un puntero a una matriz de caracteres. Idk, me gustaría que alguien explicara cómo funciona% [width] c.

También verifiqué que todos los ‘array’, ‘& array’ y ‘& array [0]’ dan la dirección de su primer elemento. Esto es lo que hice:

 int main() { char array[10]; puts("ADDRESS:"); printf(" %p \n %p \n %p", array, &array, &array[0]); return 0; } 

Si todos dan la misma dirección, ¿por qué está dando tales advertencias? También funciona para% s. Todos funcionan bien en la mayoría de los comstackdores de Windows, sin advertencias.

Como soy un usuario de Windows, nunca he usado el comstackdor gcc antes. Y lo que estaba pensando era que simplemente no es obligatorio escribir y como con los punteros de función. No necesariamente tienes que escribir y con punteros de función, leo.

Estoy cada vez más confundido, por favor ayúdame a conseguirlo.

Gracias.

array y &array producen un puntero a la misma dirección, pero con diferentes tipos. El primero es equivalente en la mayoría de las situaciones a &array[0] , un char * en su caso. &array , sin embargo, es la dirección de la propia matriz, que tiene el tipo char (*)[10] en su ejemplo.

array y & array no son lo mismo … incluso si tienen la misma ubicación de dirección en él.

La matriz aquí es char array, apunta a una única char, y si la incrementa aumenta en un tamaño de char.

pero & array apunta a toda la matriz y si aumenta aumenta con el tamaño de la matriz.

La función scanf espera para la matriz .. no & matriz