увеличивая массив указателей в C - PullRequest
6 голосов
/ 03 июня 2011

это, вероятно, довольно тривиальная вещь, но до сих пор это немного ускользает от меня ..

char * a3[2];<br> a3[0] = "abc";<br> a3[1] = "def";<br> char ** p;<br> p = a3;

это работает:

printf("%p - \"%s\"\n", p, *(++p));

это не так:

printf("%p - \"%s\"\n", a3, *(++a3));

ошибка, которую я получаю при компиляции:

Значение l требуется в качестве операнда приращения

что я делаю не так, почему и каково решение для 'a3'?

Ответы [ 5 ]

4 голосов
/ 03 июня 2011

a3 - постоянный указатель, вы не можете увеличить его.«р», однако, является общим указателем на начало а3, который может быть увеличен.

4 голосов
/ 03 июня 2011

Вы не можете присвоить a3 и не можете увеличить его. Имя массива является константой, его нельзя изменить.

с-чаво

0 голосов
/ 03 июня 2011

Вы не можете увеличивать или указывать любой массив символов на что-либо еще после создания.Вам нужно изменить или получить доступ с помощью индекса.like a[1]

0 голосов
/ 03 июня 2011

a3 - это имя массива.Это как постоянный указатель.

Вы не можете его изменить.Вы можете использовать a3 + 1 вместо ++a3.

Другая проблема связана с использованием "%s" для аргумента *(++a3).Поскольку a3 является массивом символов, *a3 является символом, а соответствующий спецификатор формата должен быть %c.

0 голосов
/ 03 июня 2011

Попробуйте

char *a3Ptr = a3;
printf("%p - \"%s\"\n", a3, *(++a3Ptr));

В C массив char [] отличается от char *, даже если вы можете использовать char * для ссылки на первое местоположение массива char.1005 *

не являются ли указатели "p" и "a3" на указатели?

Да, но a3 постояннаВы не можете изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...