Występuje błąd niekompatybilnych typów, ponieważ przypisujesz tablice ciągów (typ char * w C) do tablic wskaźników do int (takich jak int *x[]
). Komunikat o błędzie wydany przez kompilator jest nieco mylący, ponieważ C robi dużo za kulisami, aby spróbować przekonwertować zmienne z jednego typu na inny.
Ponieważ znaki są reprezentowane wewnętrznie jako liczby (litery odpowiadają ich wartościom ASCII), C jest w stanie konwertować znaki na ints, więc próbuje traktować zmienne xiy jako tablice wskaźników do znaków zamiast do int, stąd char *[3]
. Widzi {"foo", "bar", "baz"} jako typ char **
, ponieważ łańcuchy są typu char *
i tablice zasadniczo przechowywane jako wskaźniki w C, więc jest to wskaźnik do char *
lub char **
.
Chociaż nie jest to całkowicie związane z twoim pytaniem, zastanawiam się również, co próbujesz zrobić z x = y;
Jak jest napisane, to sprawi, że x wskaże tę samą tablicę co y, pozostawiając tablicę, która jest używana x wskazać na niedostępne. Aby sprawdzić, czy dwie zmienne w C są równe, należy użyć operatora ==. Testowanie równości nie jest tak proste dla tablic ani łańcuchów, ale to całkowicie wykracza poza zakres tego pytania.
Dlaczego przechowujesz ciągi znaków w tablicach zawierających wskaźniki liczb całkowitych? –
Czy sprawdziłeś numer linii? – SLaks