Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
Заблокирован

Как грамотней писать объявление указателя?

24.09.2014, 13:11. Показов 6943. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ну собственно сабж.
C++
1
int* a;
или
C++
1
int *a;
Куда Фен Шуй рекомендует звёздочку ставить ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.09.2014, 13:11
Ответы с готовыми решениями:

Как грамотней писать код?
Добрый день. 1. Как правильней перебирать контейнер (карта, хеш, список...) - обычным for(int = 0;...) или с использованием итераторов? ...

Как обратиться к полям структуры через указатель и объявление указателя на структуру
Как обратиться к полям структуры через указатель и объявление указателя на структуру? #include "stdAfx.h" #include...

Компилятор не принимает объявление указателя на функцию
Портирую библиотеку коннектора на си для tarantool. Код целиком тут. Туллчейн - cygwin - cmake - clion. При сборке возникает две...

55
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.09.2014, 09:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alsav22 Посмотреть сообщение
Он все три варианта использует. Когда посередине, то без пробелов.
Тогда четыре, потому что и посередине с пробелами использует.
0
Заблокирован
25.09.2014, 10:29  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
А вот когда (если) программирование на C++ станет работой и будут проекты на тысячи или даже десятки тысяч строк, с командой программистов в несколько десятков человек, тогда, вполне возможно, сам начнёшь как Mr.X писать.
Я недавно сдавал проект, в котором было... точно считать не буду, фалов очень много, ну около 300 000 строк...
Писать в столбик аргументы - вронг вей.
Цитата Сообщение от alsav22 Посмотреть сообщение
int * a;
А это те же щи
Как тут кто - то предлагал объявлять переменные так: int *a, b;, тогда получается так что ли: int * a, * b;
Явно не по фен шую, хотя одной строкой я никогда несколько переменных не объявляю.
Объявление через два пробела типа: int * a; на мой взгляд смахивает на умножение, собственно я так всегда и пишу: int a = b * c;
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
25.09.2014, 10:36
Я бы резюмировал следующим образом:

i) Придерживайтесь соглашений о кодировании в проекте, если они есть. Это может быть и корпоративный стандарт, и прямые договорённости с командой разработчиков.

ii) Если Вы исправляете чужой код, придерживайтесь той структуры, которая уже существует. Не нужно запутывать код своими тараканами, там и чужих достаточно.

iii) Соблюдайте собственные "стандарты". Если для себя Вы определились, как писать код (как расставлять скобки, куда прижимать звёздочку, где расположить блок private), то придерживайтесь выбранного пути, не будьте шизофрениками.
----------------------------


О звёздочках.

С++
i) Сводите работу с указателями к минимуму! С++ позволяет работать на низком уровне, но именно позволяет. Прежде, чем начать работу на низком уровне, проработайте варианты высокого уровня.

ii) Используйте умные указатели прежде всего. Тогда ничего никуда прижимать не нужно.

iii) Ограничивайте связи других модулей с той областью кода, где используете низкоуровненвые возможности. В идеале вся низкоуровневая программа должна оставаться внутренней деталью вашей реализации. При написании бинарносовместимой библиотеки с C-интерфейсом, строго ограничивайте низкоуровневый код рамками интерфейса библиотеки. Не позволяйте низкоуровневому коду проникать в модули высокого уровня
----------------------------

Если Вы работаете с указателями:
i) Прижимайте, куда нравится, но соблюдайте правила соглашений (см. выше).

ii) Не используйте typedef для придания конструкции T* квалификации типа. Именно * модифицирует переменную.

iii) Если Вы, всё же, решили "определить тип" T*, сразу определите тип T const *. Тоже самое относится и к ссылкам. Держите подобные определения строго внутри вашего ресурса (читай класса/структуры), не пишите глобальных определений.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.09.2014, 10:47
Цитата Сообщение от mporro Посмотреть сообщение
Используйте умные указатели прежде всего. Тогда ничего никуда прижимать не нужно.
Да-да. Но символ ссылки никто не отменял, а к нему все вышесказанное тоже относится.
0
Заблокирован
25.09.2014, 10:59  [ТС]
Цитата Сообщение от mporro Посмотреть сообщение
Сводите работу с указателями к минимуму!
Ты что на шарпе программируешь ? Пфф... Как это сводить работу с указателями к минимуму ? ИМХО бред.
Цитата Сообщение от mporro Посмотреть сообщение
Если Вы исправляете чужой код, придерживайтесь той структуры, которая уже существует. Не нужно запутывать код своими тараканами, там и чужих достаточно.
А если код писал валенок и его стиль просто отвратителен, надо свой гуд стайл переделывать под булшит ?
Цитата Сообщение от mporro Посмотреть сообщение
Используйте умные указатели прежде всего. Тогда ничего никуда прижимать не нужно.
Лично для меня эти умные указатели остаются не нужным выпендрёжем. Никогда ими не пользуюсь, ну разве что иногда при написание под DirectX чего - то, но там WinApi_шные CComPtr и т.д.

Используя всякие умные указатели можно иногда получить пинок в зад от ума этих указателей и софт наткнётся на нульпоинтер или еще чего. Я всегда работаю с памятью напрямую и указатели на неё так же регулирую сам, ведь в этом то и есть суть гибкости С++.

Цитата Сообщение от mporro Посмотреть сообщение
С++ позволяет работать на низком уровне, но именно позволяет. Прежде, чем начать работу на низком уровне, проработайте варианты высокого уровня.
low - level - это assembler во всех вариациях. С++ - это как раз таки относительно высокий уровень. Точнее это тот уровень, выше которого я считаю не разумным подниматься из - за потери контроля над возможностями (иначе я б торчал на ветке C# или на Java )
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
25.09.2014, 11:07
Mr.X, для ссылки пользуйтесь первыми тремя пунктами.
Ссылка объект иной, нежели указатель.

Добавлено через 5 минут
Scrooge McDuck, всё потому, что на С++ Вы не программировали.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.09.2014, 11:15
Цитата Сообщение от mporro Посмотреть сообщение
Mr.X, для ссылки пользуйтесь первыми тремя пунктами.
Ссылка объект иной, нежели указатель.
Что-то вы загадками изъясняетесь. Мы в этой теме наоборот стремимся познать в чем суть вещей и где, собственно, мирозданье.
1
2405 / 1935 / 763
Регистрация: 27.07.2012
Сообщений: 5,574
25.09.2014, 11:32
Я посерединке ставлю с пробелами:
C++
1
int * a;
А конструкцию
C++
1
int * a, b;
просто не использую, так как она сама уже не "по фен-шую". По фен-шую - это объявлять переменную наиболее близко к месту использования. Желательно ещё и инициализировать её сразу. А указанная конструкция как бы намекает, что переменные (как минимум, одна) объявлена заранее, а использоваться будет как-нить потом.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.09.2014, 11:43
Цитата Сообщение от John Prick Посмотреть сообщение
Желательно ещё и инициализировать её сразу.
Вообще-то специалисты советуют ВСЕГДА инициализировать.
0
2405 / 1935 / 763
Регистрация: 27.07.2012
Сообщений: 5,574
25.09.2014, 11:49
Цитата Сообщение от Mr.X Посмотреть сообщение
Вообще-то специалисты советуют ВСЕГДА инициализировать.
Тем более. Тогда объявление сразу указателя и переменной становится ещё более нелепым:
C++
1
int *a = &c, b = 100500;
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.09.2014, 12:42
Цитата Сообщение от John Prick Посмотреть сообщение
Тем более. Тогда объявление сразу указателя и переменной становится ещё более нелепым:
Ну, такие вещи мы уже выше осудили как сугубо сишные.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.09.2014, 12:44
Цитата Сообщение от Scrooge McDuck Посмотреть сообщение
Я недавно сдавал проект, в котором было... точно считать не буду, фалов очень много, ну около 300 000 строк...
Scrooge McDuck, если проект на 300 000 строк был написан Вами и написан на C++, то я вообще не понимаю на кой ляд Вы создаёте топики вроде этого.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
25.09.2014, 15:54
Цитата Сообщение от gru74ik Посмотреть сообщение
Это пока у тебя учебные записульки в пределах 100-200 строк. А вот когда (если) программирование на C++ станет работой и будут проекты на тысячи или даже десятки тысяч строк, с командой программистов в несколько десятков человек, тогда, вполне возможно, сам начнёшь как Mr.X писать.
У нас бы за такое выперли. Никого не хочу обидеть, но этот код читать весьма напряжно.

Но параметры в столбик то мы тоже пишем - так можно дать комментарий по каждому из них. Вот только эти ацкие пробелы...

Добавлено через 1 минуту
С ними держать код с ограничительной чертов в 80 или хотя бы 100 символов - напряжно.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.09.2014, 17:42
Цитата Сообщение от MrGluck Посмотреть сообщение
У нас бы за такое выперли. Никого не хочу обидеть, но этот код читать весьма напряжно.
Если ТС получил ответ на свой вопрос, то логично закрыть топик. Потому как "звёздочку" мы рассмотрели со всех возможных ракурсов.
А обсуждение разного стиля оформления кода можно продолжить в более подходящем для таких обсуждений разделе и более адекватной, на мой взгляд, теме.
0
Заблокирован
25.09.2014, 18:08  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
Scrooge McDuck, если проект на 300 000 строк был написан Вами и написан на C++, то я вообще не понимаю на кой ляд Вы создаёте топики вроде этого.
Был написан моей командой, основной корпус кода - мой.
С чего ты взял, что вопросы про звёздочку как - то говорят о моей репутации ? Интересно же, как другие кодят, всегда можно что - то для себя подчеркнуть. Да и вообще форум и сделан для общения или ты думаешь, что руководитель разработки топовой компании не имеет права на форуме вопросы нубские задавать ?
Цитата Сообщение от gru74ik Посмотреть сообщение
Если ТС получил ответ на свой вопрос, то логично закрыть топик.
Да я уж давно получил компетентное мнение и буду как и раньше объявлять так: int* a; Закрывайте тему, не знаю, что ты тут холиварите
0
1 / 1 / 0
Регистрация: 29.02.2016
Сообщений: 3
05.05.2019, 10:36
Еще взгляд на "звездочку" в объявлении указателя:

нечитаемый текст:
C++
1
int*a
похоже на умножение:
C++
1
int * a
смахивает на операцию разыменования:
C++
1
int *a
остается:
C++
1
int* a
ни с чем не спутаешь, но не рекомендуется объявление нескольких переменных в одной строке через запятую.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2019, 10:36

Объявление указателя на структуру в объявлении структуры
struct node { int data; struct node * next; }; Зачем может понадобится такое объявление?

Объясните объявление указателя на объект класса
Доброго времени суток! Подскажите, пожалуйста, что означает данная строчка? B *b; B - это класс. *b - указатель....

Рекурсивный include, как грамотней сделать?
Привет! Что - то я совсем онубел :D Есть два класса, вот их хэдэры: //Base.h #pragma once #include "Child.h" class...

Как наиболее красиво писать объявление функций?
Допустим, функция возвращает 3 аргумента. def make_smth(): return a, b, c А другая функция принимает эти 3 аргумента: def...

Объявление глобального указателя всего проекта
Здравствуйте! Программа состоит из нескольких модулей. В одном из модулей написан класс, объект которого используется в других модулях. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
56
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru