С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 07.04.2016
Сообщений: 66
1

Статический указатель

06.04.2017, 18:11. Показов 8614. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Возникли вопросы в процессе изучения C/С++.

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



И сами вопросы:
1. Если объявить статический глобальный указатель, чем он будет отличаться от обычного глобального указателя?
2. Если объявить статический локальный указатель, чем он будет отличаться от обычного локального указателя?
3. В какой именно области памяти размещаются статические переменные? В той же, что и глобальные переменные?
4. Если объявить статическую переменную в структуре (struct), она будет работать так же, как и в классах или как в функции?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2017, 18:11
Ответы с готовыми решениями:

Статический указатель
пример, есть такая конструкция например: class A { ... }; class B { private:

Указатель на статический массив
Есть несколько статических массивов: const char a = { 0, 1, 2, 3 }; const char b = { 4, 5, 6, 7...

Не работает статический указатель
Добрый день! Подскажите пожалуйста почему не работает такая конструкция ? class A {...

Указатель на статический трехмерный массив
Как сделать указатель на статический трехмерный массив? Почему компилятор сам не определяет размер...

8
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
06.04.2017, 19:09 2
Лучший ответ Сообщение было отмечено java_user как решение

Решение

Цитата Сообщение от java_user Посмотреть сообщение
И сами вопросы:
1. Если объявить статический глобальный указатель, чем он будет отличаться от обычного глобального указателя?
2. Если объявить статический локальный указатель, чем он будет отличаться от обычного локального указателя?
3. В какой именно области памяти размещаются статические переменные? В той же, что и глобальные переменные?
4. Если объявить статическую переменную в структуре (struct), она будет работать так же, как и в классах или как в функции?
1) Гугл подсказывает что если в двух разных cpp есть одноименные глобальные static переменные, линкер не будет ругаться матом.
2) Инициализация будет выполнена один раз, в момент первого обращения. Дальше указатель будет работать как глобальная переменная, только ее будет видно только из данной функции.
3) Да.
4) Классы отличаются от структур только тем что их члены по умолчанию приватные. В остальном это синонимы.
1
1 / 1 / 0
Регистрация: 07.04.2016
Сообщений: 66
06.04.2017, 19:26  [ТС] 3
Цитата Сообщение от Renji Посмотреть сообщение
1) Гугл подсказывает что если в двух разных cpp есть одноименные глобальные static переменные, линкер не будет ругаться матом.
2) Инициализация будет выполнена один раз, в момент первого обращения. Дальше указатель будет работать как глобальная переменная, только ее будет видно только из данной функции.
3) Да.
4) Классы отличаются от структур только тем что их члены по умолчанию приватные. В остальном это синонимы.
Не понял ответ на 4 вопрос, какие синонимы?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
06.04.2017, 19:29 4
Цитата Сообщение от java_user Посмотреть сообщение
Не понял ответ на 4 вопрос, какие синонимы?
Полные синонимы во всем. Включая случай, когда вы пытаетесь объявить в структуре/классе статическую переменную.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//вот это
struct SomeType
{
    //bla-bla-bla
    static int var;
};
//и вот это - полностью взаимозаменяемо
class SomeType
{
public://разница лишь в этом волшебном слове public
    //bla-bla-bla
    static int var;
};
1
1 / 1 / 0
Регистрация: 07.04.2016
Сообщений: 66
06.04.2017, 19:35  [ТС] 5
Цитата Сообщение от Renji Посмотреть сообщение
Полные синонимы во всем. Включая случай, когда вы пытаетесь объявить в структуре/классе статическую переменную.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//вот это
struct SomeType
{
    //bla-bla-bla
    static int var;
};
//и вот это - полностью взаимозаменяемо
class SomeType
{
public://разница лишь в этом волшебном слове public
    //bla-bla-bla
    static int var;
};
А Вы имели в виду, что синонимы в работе со статическими переменными?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
06.04.2017, 19:37 6
Цитата Сообщение от java_user Посмотреть сообщение
А Вы имели в виду, что синонимы в работе со статическими переменными?
Нет, я имел ввиду именно полные синонимы. В структуре точно также можно объявлять методы. Можно точно также перегружать операторы. Все будет работать точно также как в классе. Единственная разница - у структуры все это по умолчанию публичное, а у класса - приватное.
1
1 / 1 / 0
Регистрация: 07.04.2016
Сообщений: 66
06.04.2017, 19:44  [ТС] 7
Но проблема в том что к статической переменной в классе можно обратиться не создавая объекта этого класса
SomeType::var

Добавлено через 2 минуты
Зачем тогда ввели классы в C++ если это синонимы?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
06.04.2017, 19:49 8
Лучший ответ Сообщение было отмечено java_user как решение

Решение

Цитата Сообщение от java_user Посмотреть сообщение
Но проблема в том что к статической переменной в классе можно обратиться не создавая объекта этого класса
Ну так и к статической переменной в структуре можно.
Цитата Сообщение от java_user Посмотреть сообщение
Зачем тогда ввели классы в C++ если это синонимы?
Фиг его знает. Возможно это связанно с тем, что изначально C++ перед компиляцией переводился в чистый Си. И переводилке было удобней ориентироваться на новое ключевое слово, чтобы понять "вот здесь переводим, здесь оставляем как было". Возможно, авторам ключевого слова class не нравилось что у структур все по умолчанию публичное. В любом случае, современная ценность подобного нововведения действительно крайне сомнительна.
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
06.04.2017, 19:53 9
Цитата Сообщение от java_user Посмотреть сообщение
Но проблема в том что к статической переменной в классе можно обратиться не создавая объекта этого класса
SomeType::var
А в чём собственно проблема?
0
06.04.2017, 19:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2017, 19:53
Помогаю со студенческими работами здесь

Статический член указатель на класс
Доброго времени суток. Что требовалось: создать статический указатель на класс CPerson, чтобы...

Статический указатель класса и конструктор в private
Всем привет! Вчера препод показал один прием, я до конца не могу понять как он работает. В классе...

Указатель на статический массив как параметр шаблона
Добрый день. Необходимо параметр шаблона сделать указателем и передавать в него указатель на...

Статический указатель класса на объект этого же класса
Не пойму: что в этом коде не так? #include <iostream> #include <cstdlib> using namespace std;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru