Uczę się dzisiaj C. Już od jakiegoś czasu koduję w zarządzanych językach (Java, C#, Python itp.). Pomyślałem, że rozumiem szczegóły wskaźników, ale potem napisałem poniższy kod działający zgodnie z oczekiwaniami, ale wygenerowałem ostrzeżenie "niekompatybilny typ wskaźnika".Wyjaśnienie, dlaczego ten kod C działa
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;
}
Więc google, a skończyło się na zmianę linii
setText(&output);
do
setText(output);
który pozbył się ostrzeżenia. Ale teraz nie wiem, dlaczego ten pierwszy w ogóle działał. Przesyłam adres adresu, o ile wiem (ponieważ char * x; jest w zasadzie taki sam jak char x [];). Co ja nie rozumiem i dlaczego oba te elementy działają?
Trudno powiedzieć, dlaczego 'setText' działał, nie widząc jego implementacji. Chociaż, jeśli wszystkie 'setText' nie ustawi zmienną, po której program się kończy, jak możesz naprawdę stwierdzić, czy program robi to, co chcesz? – jwodder
'T *' to * nie * jest takie samo jak 'T [K]'. Zobacz np. http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr – delnan
@delnan: Link wydaje się zepsuty – Cameron