в чем разница между p.a и p-> a, где p является указателем? - PullRequest
3 голосов
/ 13 апреля 2011

Есть ли разница в p.a и p-> a, где p указатель? или они просто одно и то же.

Ответы [ 5 ]

4 голосов
/ 13 апреля 2011

Оператор . на самом деле является оператором для доступа к элементу структуры.

struct Foo
{
    int bar;
    int baz;
} aFoo;

aFoo.bar = 3;

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

struct Foo *p;
p = &aFoo;

(*p).baz = 4;

Скобки необходимы, потому что . имеет более высокий приоритет, чем *.Вышеупомянутое разыменование члена структуры, на которую указывает что-то, является чрезвычайно распространенным, поэтому -> был введен как сокращение.

p->baz = 4; // identical to (*p).baz = 4

Если p - указатель, вы никогда не увидите p.anything в простом CПо крайней мере, не во всем, что компилируется.Однако он используется для обозначения доступа к свойству в Objective-C, что было ошибкой IMO.

3 голосов
/ 13 апреля 2011

Да, вы не можете сделать p.a для указателя, оператору точки требуется фактический экземпляр, то есть значение соответствующего типа struct.

Обратите внимание, что "под капотом",p->a эквивалентно (*p).a, но его легче набирать и читать.Никто никогда не использует последнюю форму, но иногда она удобна для понимания того, что делает оператор стрелки.

1 голос
/ 13 апреля 2011

try (* p) .a или (& p) -> a, где p - указатель и экземпляр соответственно; -)

0 голосов
/ 13 апреля 2011

Это ошибка времени компиляции .. p-> a допустимо только.

0 голосов
/ 13 апреля 2011

Если p является указателем, то синтаксис pa недопустим.

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