JSON API получает запрос с разными переменными для разных страниц - Songkick

Игнорируя ваш код и отвечая на принцип вашего вопроса, см. эту запись в comp.lang.c FAQ: Почему я не могу передать char ** функции, которая ожидает const char **?

Причина, по которой вы не можете присвоить значение char ** указателю const char **, несколько неясна. Учитывая, что квалификатор const существует вообще, компилятор хотел бы помочь вам сохранить ваши обещания не изменять значения const. Вот почему вы можете назначить char * для const char *, но не наоборот: явно безопасно «добавить» const -ness к простому указателю, но было бы опасно его убрать. Однако предположим, что вы выполнили следующую более сложную серию заданий:

const char c = 'x';    /* 1 */
char *p1;              /* 2 */
const char **p2 = &p1; /* 3 */
*p2 = &c;              /* 4 */
*p1 = 'X';             /* 5 */

В строке 3 мы присваиваем char ** const char **. (Компилятор должен жаловаться.) В строке 4 мы присваиваем const char * const char *; это явно легально. В строке 5 мы модифицируем то, что указывает char * - это должно быть законным. Однако p1 заканчивается, указывая на c, который является const. Это произошло в строке 4, потому что *p2 был действительно p1. Это было установлено в строке 3, которая является назначением формы, которая запрещена, и именно поэтому строка 3 запрещена.

blockquote>

И как ваш вопрос помечен как C ++, а не C, он даже объясняет, что использовать следующие const квалификаторы:

(C ++ имеет более сложные правила для назначения указателей со знаком const, которые позволяют вам делать больше видов назначений без каких-либо предупреждений, но все же защищать от непреднамеренных попыток изменения значений const. C ++ все же не позволил бы присвоить char ** const char **, но это позволило бы вам уйти с назначением char ** в const char * const *.)

blockquote>

0
задан lowercase 5 March 2019 в 18:52
поделиться