Estoy aprendiendo C hoy. He estado codificando en lenguajes administrados (Java, C#, Python, etc.) desde hace un tiempo. Pensé que estaba entendiendo los detalles de los punteros, pero luego escribí el siguiente código que funcionó como se esperaba, pero generó una advertencia de "tipo de puntero incompatible".Aclaración sobre por qué funciona este código C
void setText(char* output) {
//code to set output to whatever, no problems here.
}
int main(int argc, const char* argv[]) {
char output[10];
setText(&output);
//[EDITED] ...other test code which printf's and further manipulates output.
return 0;
}
Así que busqué en Google, y terminó cambiando la línea
setText(&output);
a
setText(output);
la que se deshizo de la advertencia. Pero ahora no sé por qué el primero estaba funcionando en absoluto. Estaba enviando la dirección de una dirección hasta donde puedo decir (porque char * x; es esencialmente lo mismo que char x [];). ¿Qué estoy malinterpretando y por qué funcionan ambos?
Es un poco difícil decir por qué 'setText' funcionaba sin ver su implementación. Aunque, si todo 'setText' hace es establecer una variable, después de que el programa sale, ¿cómo se puede decir realmente si el programa está haciendo lo que quieres? – jwodder
'T *' es * no * lo mismo que 'T [K]'. Ver p. http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr – delnan
@delnan: El enlace parece estar roto – Cameron