2016-12-02 2 views
-2

В чем разница между -> и . при вызове переменных в структуре? Я видел, что они оба используются в разных сценариях, но не могут определить разницу между ними.Разница в вызовах переменных структуры

+3

Один используется, когда у вас есть * указатель * на структуру. Другой - когда у вас есть * экземпляр * структуры. Пожалуйста [найдите хорошую книгу, чтобы прочитать об этом] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list). –

ответ

2
  • -> означает, у вас есть переменная, которая указывает на кусок памяти, содержащий структуры. Чтобы получить доступ к своим членам, вы должны разыменовать указатель, а затем добавить смещение к члену. -> делает это за вас.

  • . означает, что ваша переменная составляет, и вам нужно только добавить смещение к члену.

Как пользователь Элиот B указывает, если у вас есть указатель s на структуру, то доступ к члену elem может быть сделано двумя способами: s->elem или (*s).elem.

С (*s) у вас есть выражение, что «есть» структура, и теперь вы используете dot-оператор для доступа к elem.

1

Разница касается определенного экземпляра структуры. '->' и '.' операторы всегда о левом операнде.

Если левый операнд является указателем, то вы используете '->', иначе вы используете '.'.

Например.

struct Foo bar1; 
struct Foo* bar2 = malloc(sizeof(struct Foo)); 
bar1.variable = "text"; 
bar2->variable = "text"; 
1

x->y (-> является указатель на оператора члена) эквивалентно (*x).y. Из-за приоритета оператора вы не можете написать *x.y, поскольку это будет оцениваться как *(x.y).

Первый легче напечатать и намного понятнее. Он используется, когда x является указателем на структуру, содержащую элемент y.

Смежные вопросы