Moja XCode (domyślnie kompilator powinien być dzyń?) Pokazuje mi na tym kodzie ostrzeżenie:Nie można przekazać adres tablicy typu char * [2], aby funkcjonować biorąc char ***
Incompatible pointer types passing 'char *(*)[2]' to parameter of type 'char ***'
(Dzwoniąc func)
void func (char ***arrayref, register size_t size) {
/// ...
}
int main()
{
char *array[2] = {"string", "value"};
func(&array, 2);
}
natomiast kod ten nie jest problemem (= bez ostrzeżenia):
void func (char **arrayref, register size_t size) {
/// ...
}
int main()
{
char *array[2] = {"string", "value"};
func(array, 2);
}
Chociaż usuwa ostrzeżenia
func((char***)&array, 2);
Wciąż nie wiem, dlaczego pierwszy wysyła ostrzeżenie, podczas gdy drugi nie.
Ponadto, gdy pierwsza jest problemem, bym również oczekiwać, że pierwsza emituje ostrzeżenie jak:
Incompatible pointer types passing 'char *[2]' to parameter of type 'char **'
Błąd jest całkiem jasny: 'char * [10]' i 'char **' to dwie różne rzeczy. – LihO
Ponieważ obsada mówi "Wiem, co robię, nie ostrzegaj mnie" – dcaswell
@LihO tak. Ale dlaczego drugi kod NIE wysyła wtedy ostrzeżenia? – bwoebi