Esiste un modo che posso aggiungere const
parola chiave ad un array passato come parametro alla funzione:Aggiunta di parola chiave const ad un array passato come parametro di funzionare
void foo(char arr_arg[])
Se pongo const
prima char
(void foo(const char arr_arg[])
) o dopo char
(void foo(char const arr_arg[])
), ciò significherebbe che è char
che è costante, non lo arr_arg
.
Ho appena read che sotto il cofano una matrice inviata come parametro per funzionare è rappresentata da un puntatore, quindi void foo(char arr_arg[])
è lo stesso di void foo(char* ptr_arg)
. Tenendolo conto, posso riscrivere la funzione come void foo(char * const ptr_arg)
perché sia esattamente ciò che voglio ottenere.
Ma io voglio sapere se c'è un modo per aggiungere const
parola chiave in questa dichiarazione void foo(char arr_arg[])
per essere lo stesso di void foo(char * const ptr_arg)
(e nonvoid foo(char const * ptr_arg)
o void foo(const char * ptr_arg)
)?
Voglio solo capire se c'è una sintassi per rendere costante arr_arg
con la notazione di matrice []
.
v'è alcuna ragione specifica non si vuole fare nulla 'foo (char * const ptr_arg)'? È esattamente la stessa sintassi ovunque. Puoi ancora fare ptr_arg [0] come se fosse stato dichiarato come array. –
@Hans Voglio solo capire se è sintatticamente possibile farlo con la notazione array '[]'. Nessun motivo specifico. Voglio solo chiarire se è possibile o meno (solo per sapere in futuro e non perdere tempo a contemplare se è possibile o meno ancora e ancora). – ovgolovin
Non penso che sia necessario dichiarare il puntatore stesso come const in quanto verrà comunque passato per valore. Solo se si desidera proteggere esplicitamente dall'assegnazione (la copia del puntatore sullo stack) all'interno della definizione delle funzioni. –