Разница между оператором -> и указателем * (C++)
Я знаю это ->
Оператор может быть указателем на направление переменной, но зачем использовать его, когда у вас есть *
оператор указателя, в чем разница, и могу ли я предпочесть один другому? например:
a*b
означает, что указатель на b (правильно? я могу ошибаться, простите меня, потому что я новичок)
это эквивалентно a->b
?
а также a<-b
смысл б это указатель на а?
если это так, можно ли положиться на ->
потому что это проще?
2 ответа
a*b
обычно означает "умножить a
а также b
Msgstr ". В С ++ очень мало лексических элементов, и многие из них служат разным целям, поэтому контекст важен.
a->b
является членом доступа и соответствует (*a).b
доступ к b
член значения, на которое указывает a
,
Обратите внимание, что оба *
и ->
операторы могут быть перегружены.
Для меня кажется, что у вас есть путаница о том, что делает указатель и где *
принадлежит.
Указатель - это особый тип объекта, который указывает на другой объект, а не на объект.
Указатель может быть объявлен так:
int *a;
Вот, *
указывает, что a
это указатель Типы указателей отличаются от типа объекта, на который они указывают.
Но что a
указывает на неопределенность. Вам нужно назначить адрес, чтобы сделать a
указать на что-то. Для этого сделаем целое число (здесь инициализируется значением 2
):
int b = 2;
И разреши a
указать на b
:
a = &b;
Здесь одинарный &
оператор используется, чтобы взять b
адрес. И вы назначаете это a
, а потом a
указывает на b
,
Конечно, указатель также может быть инициализирован. Вышеприведенные утверждения можно заменить на:
int b = 2;
int *a = &b;
Тогда как ты получаешь b
ценность от a
? Вы можете сделать это путем разыменования a
:
std::cout << *a << std::endl;
Это печатает 2
, Унарный оператор *
используется здесь для разыменования a
, это *
отличается от *
раньше заявлял a
выше и не следует путать.
++*a;
Это увеличивает b
, b
теперь имеет значение 3
,
Ты можешь сделать a
указать другой объект, назначив другой адрес:
int c = 3;
a = &c;
Сейчас a
указывает на c
вместо b
,
Вы можете скопировать указатель, который будет указывать на тот же объект:
int *d = a;
Сейчас d
указывает на c
, который a
также указывает на.
Ссылки отличаются от указателей:
int &e = b;
&
используется здесь, чтобы указать e
это ссылка. это &
отличается от &
используется, чтобы взять адрес и не следует путать. Вот, e
относится к b
,
Они ссылаются на объект и всегда действуют так, как если бы они были этим объектом:
++e;
Это увеличивает b
, b
теперь имеет значение 4
,
В отличие от указателей, ссылки всегда должны ссылаться на объект:
int &f; // error
Ссылка также может ссылаться на указатель:
int *&g = a;
g
относится к a
,
Но указатель не может указывать на ссылку:
int &*h = &e; // error