Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Небольшой вопрос касательно стилистики, не могу понять одну вещь 
:(
    Опции темы
Cheese
Дата 15.5.2010, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 25.11.2007

Репутация: нет
Всего: нет



Есть одна вещь, которую я не понимаю (извините, мало опыта): вот есть, значит, глобальные переменные, их пишут в начале модуля, отдельно от всех функций, и каждая из них (функций) имеет к этим переменным доступ. Это понятно. Например

Код

int n;


Число. Но вот когда доходит до глобальных структур, тут есть одна непонятка: почти во всех примерах, которые я видел, объявляют не просто структуру, а указатель на неё. Если, есть структура, например, human, то пишут

Код

human* gena_petrov;


Так почему не написать

Код

human gena_petrov;


?

Спасибо за внимание.

P.S. Я знаю, что в функции надо передавать указатели на структуры в качестве аргумента, потому что они передаются через стек, а он не резиновый. Тут немного другое.
PM MAIL   Вверх
djamshud
Дата 15.5.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
kemiisto
  Дата 15.5.2010, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Цитата(Cheese @  15.5.2010,  17:45 Найти цитируемый пост)
их пишут в начале модуля

Вначале, чего, простите? smile 

Вопрос не по стилистике. Вы покамест смысл указателей не понимаете. Удачи. smile 

Это сообщение отредактировал(а) kemiisto - 15.5.2010, 17:01


--------------------
PM MAIL WWW GTalk Jabber   Вверх
borisbn
Дата 15.5.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Cheese @  15.5.2010,  16:45 Найти цитируемый пост)
Если, есть структура, например, human, то пишут код 
Код

human* gena_petrov;

Так почему не написатькод 
Код

human gena_petrov;

?

Почему ты уверен, что все пишут код как ты указал ? Всё зависит от задачи. Если есть необходимость в указателе ( например, как сказал 
djamshud ), то используют указатель. Нужно структуру - используют структуру.
А вообще глобальных переменных лучше избегать, и пользоваться ими только, если другого выхода нет.

Это сообщение отредактировал(а) borisbn - 15.5.2010, 17:21


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Cheese
Дата 15.5.2010, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 25.11.2007

Репутация: нет
Всего: нет



Цитата(borisbn @  15.5.2010,  17:20 Найти цитируемый пост)
А вообще глобальных переменных лучше избегать, и пользоваться ими только, если другого выхода нет.


А чем ж пользоваться тогда, если две разные функции  должны использовать одну сущность, скажем так?

И побочный вопрос: то есть нет ничего противоестественного или опасного, с точки зрения распределения памяти, в том, чтобы написать

Код

human gena_petrov;


? Просто я очень, очень часто сталкивался с тем, что при работе со структурами используются именно указатели на них.

Это сообщение отредактировал(а) Cheese - 15.5.2010, 17:36
PM MAIL   Вверх
KOHCEPBATOP
Дата 15.5.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 21.4.2010

Репутация: 1
Всего: 1



Если делать глобальной не структуру, а указатель, то тогда уж писать так:
Код

human* gena_petrov = NULL;

Тогда программа может проверить инициализирована она или нет. А со структурой сложнее. Нужно быть уверенным, что она будет проинициализирована раньше , чем потребуются ее данные.



Цитата(Cheese @  15.5.2010,  17:28 Найти цитируемый пост)
Просто я очень, очень часто сталкивался
А насколько разнообразные были исходники (разные люди, разные отделы, разные предприятия и т.п.). А то, понимаешь, стиль может накладывать отпечаток на код. 

PM MAIL   Вверх
borisbn
Дата 16.5.2010, 09:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Cheese @  15.5.2010,  17:28 Найти цитируемый пост)
А чем ж пользоваться тогда, если две разные функции  должны использовать одну сущность, скажем так?

Передавай в функцию в качестве параметра то, с чем она должна работать. Функция на то и функция, чтобы выполнять действия, а не знать о глобальных переменных.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 17.5.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Cheese @  15.5.2010,  16:45 Найти цитируемый пост)
Так почему не написать
Действительно, почему бы и не написать? Вы не поверите - и ведь пишут!
Цитата

почти во всех примерах, которые я видел, объявляют не просто структуру, а указатель на неё.
Может стоит посмотреть более другие примеры, или вообще реальные программы?
Пока ваш вопрос из серии -
Цитата

Как известно, Луна состоит из Швейцарского сыра. Вопрос - почему именно из Швейцарского?



Это сообщение отредактировал(а) xvr - 17.5.2010, 11:28
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.