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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели, ссылки, и всякая такая ерунда 
:(
    Опции темы
sorokin
Дата 9.7.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Начал вот почитывать книжку по Си на ночь. Жуть. Не врубаюсь.

Вопрос первый:
int *px;
printf ("%x ", px);
printf ("%x ", &px);
printf ("%x ", &px[0]);
Выводит что-то следующее:
bffe24dc
bffe2424
bffe24dc
Что мне вывела строка: "printf ("%x ", &px);"?

Вопрос второй:
Что значит "static variable *ph"? Как это понимать на деле? 
PM MAIL   Вверх
Void
Дата 9.7.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(sorokin @  9.7.2006,  22:19 Найти цитируемый пост)
Что мне вывела строка: "printf ("%x ", &px);"?

Адрес локальной переменной px типа указатель на int. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Fazil6
Дата 9.7.2006, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Что значит "static variable *ph"? Как это понимать на деле? 

зависит от контекста 
PM MAIL   Вверх
bsa
Дата 9.7.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Код
static variable *ph;

Это статичный указатель на переменную типа variable.
Все статичные переменные существуют в единственном экземпляре в программе/функции/классе и инициализируются только при запуске программы. Короче пример: 
Код
#include <iostream>
int func(int y) {
     static int x = 0;
     return y + x++;    //вернуть сумму x и y, затем увеличить x на 1
}

main() {
  std::cout << func(0) << std::endl << func(0) << std::endl;   
}
То результат будет следующим:
Код
0
1
 
PM   Вверх
Fazil6
Дата 9.7.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Все статичные переменные существуют в единственном экземпляре в программе/функции/классе и инициализируются только при запуске программы.

не совсем так 
PM MAIL   Вверх
bsa
Дата 9.7.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Если не так, то как?
Возможно, глобальная статичная переменная не доступна из другого модуля, нежели в котором она определена. Но я не уверен. 
PM   Вверх
Daevaorn
Дата 9.7.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(bsa @  9.7.2006,  22:15 Найти цитируемый пост)
Все статичные переменные существуют в единственном экземпляре в программе/функции/классе и инициализируются только при запуске программы. Короче пример: 

Локальные переменные со статическим storage duration инициализируются, когда программа впервые входит в блок, где они определены.
Глобальные статические переменные и статические члены класса, да, инициализируются при старте программы.
Цитата(bsa @  9.7.2006,  22:23 Найти цитируемый пост)
Возможно, глобальная статичная переменная не доступна из другого модуля

В С++ нет понятия "модуль". Есть только похожее - единица трансляции. Так вот, ты прав, глобальная статическая переменная имеет internal linkage. Но статические data member'ы имеют external linkage. 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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