Существует ошибка несовместимых типов, поскольку вы назначаете массивы строк (тип char * в C) массивам указателей на ints (например, int *x[]
). Сообщение об ошибке, данное компилятором, немного запутывается, потому что C делает много за кулисами, чтобы попытаться преобразовать переменные из одного типа в другой.
Как символы обозначаются внутри чисел (буквы соответствуют их значениям ASCII), C может преобразовывать символы в ints, поэтому он пытается обрабатывать переменные x и y как массивы указателей на символы вместо ints, char *[3]
. Он видит {"foo", "bar", "baz"} как тип char **
, потому что строки имеют тип char *
и массивы, по существу хранящиеся в качестве указателей в C, поэтому это указатель на char *
или char **
.
Хотя это не полностью связано с вашим вопросом, я также задаюсь вопросом, что вы пытаетесь сделать с x = y;
Как написано, это сделает x указывать на тот же массив, что и y, оставив массив, который x использовал чтобы указать на недоступные. Чтобы проверить, равны ли две переменные на C, вы должны использовать оператор ==. Тестирование равенства не так просто для массивов или строк, но это полностью выходит за рамки этого вопроса.
Почему вы храните символьные строки в массивах, содержащих целые указатели? –
Вы проверили номер строки? – SLaks