C ++: значение и адреса указателей - PullRequest
3 голосов
/ 01 февраля 2012

Итак, у меня есть следующий код:

char userLoginName[] = "Smith";
char password[] = "Smith";
char *_userLoginName, *_password;

_userLoginName = &userLoginName[0]; //1st way
_password = password; //2nd way

Буду ли я делать то же самое в двух последних строках?Если нет, то почему и когда я должен / должен использовать каждый из этих методов?

РЕДАКТИРОВАТЬ # 1: я положил два из них на cout, и у меня был тот же результат.Я не знаю, как их дифференцировать.

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Они в основном одинаковы. Массивы при использовании в качестве r-значений распадаются на указатели на первый элемент, поэтому выражение _password = password; неявно преобразуется в _password = &password[0];

3 голосов
/ 01 февраля 2012

Да, эти два примера одинаковы.Массив password распадается на указатель на свой первый элемент во втором примере, поэтому они семантически идентичны.

0 голосов
/ 01 февраля 2012

Причина, по которой вы получаете одинаковые выходные данные для обоих, состоит в том, что они оба указывают на один и тот же литерал (хотя и не на один и тот же адрес).

Предположим, у вас было следующее:

char userLoginName[] = "Smithlogin"; 
char password[] = "Smithpass"; 
char *_userLoginName, *_password;

_userLoginName = &userLoginName[0]; //1st way
_password = password; //2nd way

У вас могут быть разные выходные данные для _userLoginName и _password.

На самом деле имя массива является указателем.Таким образом, userLoginName - это указатель на первый элемент массива символов.

Так что для оператора [].Скажем, у вас есть и массив с именем обр.arr [x] на самом деле * (arr + x).Он перемещает указатель на указанную величину, чтобы указать на то, что вы хотите, и разыменовывает его.

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

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