Quando un nome di matrice o una funzione ‘convertita’ in un puntatore? (in C)

1) Idea sbagliata :

2) Ho preso questo da questa domanda.

  • Nella maggior parte dei casi i nomi degli array vengono convertiti in puntatori.

Qualcuno può dare una spiegazione dettagliata di QUANDO il compilatore decide di convertire un nome di matrice in un puntatore e PERCHÉ ?

PS: Si prega di spiegare lo stesso con le funzioni . Anche in questo collegamento, è stato fornito un esempio, dicendo che per una funzione int square(int,int) , qualsiasi square , &square , *square , **square riferisce allo stesso puntatore di funzione. Puoi spiegare?

Modifica: snippet di codice

 int fruits[10]; printf("Address IN constant pointer is %p\n", fruits); printf("Address OF constant pointer is %p\n", &fruits); 

Produzione :

 Address IN constant pointer is 0xbff99ca8 Address OF constant pointer is 0xbff99ca8