Разница между оператором -> и указателем * (C++)

Я знаю это -> Оператор может быть указателем на направление переменной, но зачем использовать его, когда у вас есть * оператор указателя, в чем разница, и могу ли я предпочесть один другому? например:

a*b

означает, что указатель на b (правильно? я могу ошибаться, простите меня, потому что я новичок)

это эквивалентно a->b?

а также a<-b смысл б это указатель на а?

если это так, можно ли положиться на -> потому что это проще?

2 ответа

a*b обычно означает "умножить a а также bMsgstr ". В С ++ очень мало лексических элементов, и многие из них служат разным целям, поэтому контекст важен.

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
Другие вопросы по тегам