Ho la seguente applicazione di test:Perché un char * viene trattato come un char ** in C?
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(void){
char buf[512];
buf[0]= 0x1;
buf[1]= 0x2;
char *temp1 = &buf;
char *temp2 = buf;
char *temp3 = &buf[0];
printf("temp1:%p, temp2:%p, temp3:%p\n",temp1,temp2,temp3);
printf("0 = %d, %d, %d\n",temp1[0],temp2[0],temp3[0]);
printf("1 = %d, %d, %d\n",temp1[1],temp2[1],temp3[1]);
return;
}
Si compila con un avvertimento:
Ma quando l'eseguo, tutti e tre i puntatori si comportano allo stesso.
./testptr
temp1:0x7fff3a85f220, temp2:0x7fff3a85f220, temp3:0x7fff3a85f220
0 = 1, 1, 1
1 = 2, 2, 2
so che buf == &buf[0]
, ma perché &buf == &buf[0]
? Non dovrebbe &buf
essere un char**
?
'& buf' è in realtà un' char (*) [512] '(un puntatore a una matrice' char' di 512 elementi). Non sono esattamente la stessa cosa. –
Hai cambiato il tuo codice tra catturare l'output del compilatore e incollare il codice nella domanda. Il problema è sulla linea 9 ora. –
Siamo spiacenti, hai appena aggiunto una nuova riga – austinmarton