tengo la siguiente aplicación de prueba:¿Por qué un char * se trata igual que un char ** en 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;
}
Compila con una advertencia:
Pero cuando lo ejecuto, los tres punteros se comportan de la misma.
./testptr
temp1:0x7fff3a85f220, temp2:0x7fff3a85f220, temp3:0x7fff3a85f220
0 = 1, 1, 1
1 = 2, 2, 2
sé que buf == &buf[0]
, pero ¿por qué &buf == &buf[0]
? ¿No debería &buf
ser char**
?
'& buf' es en realidad un' char (*) [512] '(un puntero a una matriz de 512 elementos' char'). No son lo mismo. –
Cambió su código entre capturar la salida del compilador y pegar el código en la pregunta. El problema está en la línea 9 ahora. –
Lo siento, tiene razón, acaba de agregar una nueva línea – austinmarton