Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Указатели, ссылки


Автор: sorokin 9.7.2006, 20:19
Начал вот почитывать книжку по Си на ночь. Жуть. Не врубаюсь.

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

Вопрос второй:
Что значит "static variable *ph"? Как это понимать на деле? 

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

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

Автор: Fazil6 9.7.2006, 20:39
Цитата

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

зависит от контекста 

Автор: bsa 9.7.2006, 21:15
Код
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
 

Автор: Fazil6 9.7.2006, 21:19
Цитата

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

не совсем так 

Автор: bsa 9.7.2006, 21:23
Если не так, то как?
Возможно, глобальная статичная переменная не доступна из другого модуля, нежели в котором она определена. Но я не уверен. 

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

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

В С++ нет понятия "модуль". Есть только похожее - единица трансляции. Так вот, ты прав, глобальная статическая переменная имеет internal linkage. Но статические data member'ы имеют external linkage. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)