Quando compilo il seguente codice con gcc
e g++
, g++
dà errore e non gcc
. Si noti che il codice viene convertito da int (*)[4]
a int (*)[]
(che è puntatore a tipo di array incompleto).Differenza nelle regole di conversione del puntatore dell'array incompleto tra C e C++
int arr[4];
int (*p_arr)[] = &arr;
Come discusso nel Incomplete array type?, C
linguaggio permette questa conversione. Ma perché C++
non lo consente e restituisce l'errore error: cannot convert ‘int (*)[4]’ to ‘int (*)[]’ in assignment
. So che il C++ è più sicuro dal punto di vista di C, ma questo compito è davvero non sicuro, perché la successiva dereferenziazione del puntatore (ad esempio sizeof(*p_arr)
) dà comunque errore anche in C
?
Quale ulteriore dereferimento? – ecatmur
@ecatmur Ho aggiornato la domanda con un esempio – user1969104
@ user2079303 Penso che la domanda nel tuo collegamento riguardi il tipo di array incompleto ma non la conversione da tipo completo a incompleto, specialmente la differenza tra 'c' e' C++ 'a questo proposito. – user1969104