Другие языки программирования и технологии

Чем отличается в языке С++ объявление указателя на переменную int *a от int* a?

Чем отличается в языке С++ объявление указателя на переменную int *a от int* a?
Работать будет в обоих случаях.

Однако, лучше писать так:

int *ptrToVariableA = NULL;

префикс p или ptr вместе со "звездочкой" рядом сразу дадут понять, что это указатель, а не что-то другое. Название ptrToVariableA не вполне удачно вообще, но удачнее, чем просто "a", т. к. сразу можно понять, что это указатель на некоторую переменную, а не она сама.

Указатель до инициализации хранит мусор, как и любая другая переменная. Но в то же время, этот "мусор" вполне может оказаться валидным адресом. Пусть, к примеру, у нас есть указатель. Каким образом узнать, инициализирован он или нет? В общем случае никак. Поэтому лучше заранее и сразу инициализировать его NULL

Далее можно работать с указателем, оборачивая его в минимальную проверку,
пример:

if (ptrToVariableA != NULL) {
...//Всё хорошо, работаем с указателем.
}

Подробные названия переменных и общепринятые конвенции именования помогут организовать защищенное программирование и более легко понимать код спустя какое-то время.
Юрий Васюков
Юрий Васюков
5 124
Лучший ответ
И можно даже int*a написать :)
В случае с int *a; четко видно, что переменная - указатель
в случае int* a; появляется мнимое ощущение, что это тип-указатель, а это не так ( int* a,b; - какой тип переменной b ?)
Рустам Яндиев
Рустам Яндиев
53 630
Кроме записи ни чем не отличается. В си++ разрешается и такое и другое объявление, а программист уже использует как ему будет удобнее (нагляднее)
Миша Блинчиков
Миша Блинчиков
15 398
В отличие от кого-то из здесь ответивших, я профессионал в C++.

Гайдлайн от Гугла запрещает только вариант написания & и * между двух пробелов. Вариант без пробелов - не упомянут. А вот писать вместе с типом и писать вместе с именем - оба варианта указаны как верные.
Однако лучше писать их вместе с типом. Но если проект, в котором вы работаете, диктует обратное, а вы не руководитель - то вы можете максимум предложить изменить правила стиля.

Еще на всякий случай замечу, что *, то есть указатели, в C++ следует вообще избегать, в отличие от Си.

Ответчик выше пишет про общепринятые конвенции, и в самом деле, его идея с camelCase (ptrToVariableA) похожа на венгерскую нотацию - но она малораспространена сегодня в C++.
И если все-таки следовать венгерской нотации или чему-то подобному, то, конечно, только p, а никак не ptr-префикс, и никакой тавтологии вроде "ToVariable".
Рустам Яндиев Если писать с типом появляется неоднозначное прочтение

int* a,b;
какой тип переменной b ?
Ничем, эстетикой. Пробелы имеют значения только между литерами (ключевыми словами и переменными)
ЛЮ
Лосев Юрий
3 667

Похожие вопросы