-> Оператор стрелок с массивами? - PullRequest
1 голос
/ 10 ноября 2009

Можете ли вы использовать оператор стрелки с массивом типа struct. Например:

struct {
char *foo;
} fooArray[10];

fooArray[0]->foo = ...

Ответы [ 6 ]

4 голосов
/ 10 ноября 2009

Нет, вы должны использовать fooArray[0].foo.

fooArray - это указатель, который указывает на первый элемент массива. Использование [] разыменовывает этот указатель на заданном элементе, поэтому после применения он больше не является указателем, и оператор -> не может быть применен, так как этот оператор выполняет разыменование и доступ к элементу структуры.

3 голосов
/ 10 ноября 2009

Помните, что значение fooArray само по себе является указателем. Вы можете разыменовать указатель, добавить к нему, ...

fooArray->foo; /* same as fooArray[0].foo */
(fooArray+3)->foo; /* same as fooArray[3].foo */
1 голос
/ 10 ноября 2009

Просто помните, что a->b это сокращение от (*a).b. Помнить об этом должно помочь вам справиться с любой ситуацией. Т.е. в вашем случае fooArray[0]->foo означает (*fooarray[0]).foo, но fooarray[0] не указатель (это структура), поэтому вы не можете разыменовать его. Следовательно, это не сработает.

1 голос
/ 10 ноября 2009

вы можете использовать оператор массива (для доступа к элементам данных) только для указателей, fooArray [0] не является указателем на структуру. Если вы хотите использовать его, вы берете его адрес и используете его как

(&fooArray[0])->foo="hello";

Или объявить указатель / массив указателей для структурирования и выделения памяти для него .. подобно

fooArray* a=new fooArray();
a->foo="hello";
0 голосов
/ 10 ноября 2009

Нет, вы не можете. Должен быть указатель. Например. это нормально с точки зрения синтаксиса (но будет зависать, если не назначен fooArray):

int main ()
{
struct {
char *foo;
}* fooArray[10];

fooArray[0]->foo = "hallo";
}
0 голосов
/ 10 ноября 2009

Не в вашем случае, потому что вы используете структуру (не указатель на структуру), когда используете

fooArray[0]

Компилятор сообщит вам об этой проблеме.

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