Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
#1

sizeof для пустой структуры - C++

04.10.2012, 21:39. Просмотров 1248. Ответов 9
Метки нет (Все метки)

Есть такая небольшая программа
C++
1
2
3
4
5
6
7
8
9
10
#include "iostream"
 
int main()
{
   struct inf { };
 
   cout << sizeof(inf);  // печатает 1
 
   return 0;
}
Почему sizeof показывает 1? Ведь структура ничего не содержит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 21:39     sizeof для пустой структуры
Посмотрите здесь:

Sizeof структуры - C++
Объясните, почему sizeof(test) == 24, а не 18, как я полагал ? struct test { uint64_t param1; unsigned char param2; }; ...

sizeof для класса - C++
Создаем класс в котором только одна переменная типа int class MyClass { private: int n; }; sizeof(MyClass) для этого...

Для чего нужен Sizeof - C++
Вот строка memcpy(pMatrPr, pMatr, sizeof(double) * n * m); Это копирование исходной матрицы в преобразованную А что такое...

sizeof( char * ) & sizeof(char) - C++
Здравствуйте, не могу понять почему sizeof(char *) = 4 а sizeof(char) = 1. Ну с последним ясно , а вот с первым непойму... Может кто-то...

Есть ли в std, или где-нибудь ещё, константа для пустой строки (""), как endl (\n) для символа переноса? - C++
Раздражает писать так: return &quot;&quot;;

Для чего здесь создается пустой итератор eos - C++
Здравствуйте. Я хотел бы получить объяснение, для чего здесь создается пустой итератор eos. Как я понял, он по умолчанию инициализируется...

Sizeof - C++
int a = { 1, 2, 3, 4 },n = sizeof(a) / sizeof(a); Битый час разбираюсь с этой строкой,но понять не могу. Мы делим массив &quot;a&quot; на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
04.10.2012, 22:10     sizeof для пустой структуры #2
По стандарту размер класса ( структуры ) в C++ должен быть не нулевым.
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,644
Записей в блоге: 26
04.10.2012, 22:39     sizeof для пустой структуры #3
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
Ведь структура ничего не содержит
Тем не менее переменная типа этой структуры будет в памяти занимать один байт. Такое требование выставлено из-за того, что две разные переменные НЕ должны иметь одинаковый адрес.
v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 22:49  [ТС]     sizeof для пустой структуры #4
Цитата Сообщение от Evg Посмотреть сообщение
две разные переменные не должны иметь одинаковый адрес
Что-то не совсем это понимаю. То есть какая связь между размером переменной и ее адресом?
Evg
Эксперт CАвтор FAQ
17462 / 5700 / 361
Регистрация: 30.03.2009
Сообщений: 15,644
Записей в блоге: 26
04.10.2012, 22:53     sizeof для пустой структуры #5
Ну, к примеру, переменная размером 10 байт положена по адресу 100, следующая переменная ляжет по адресу 100+10=110. А вот если бы размер был 0 вместо 10, то следующая переменная легла бы по тому же адресу 100
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,636
04.10.2012, 22:56     sizeof для пустой структуры #6
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
То есть какая связь между размером переменной и ее адресом?
самая прямая
C++
1
2
3
4
struct inf { };
inf s1;
inf s2;
inf s3;
если бы структура имела размер 0 байт , то все переменные s1 s2 s3 находились бы одному и тому же адресу.
Это не хорошо.
а так как структура имеет размер то все переменные лежат в разных ячейках

Добавлено через 1 минуту
Цитата Сообщение от Evg Посмотреть сообщение
10 байт положена по адресу 100, следующая переменная ляжет по адресу 100+10=100.
Чей то вы ,товарищ, заговариваться начали
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
04.10.2012, 22:58     sizeof для пустой структуры #7
ValeryS, это простая очепятка, конечно же, Evg имел ввиду 110.
v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 23:03  [ТС]     sizeof для пустой структуры #8
Ага. Я все понял. Спасибо за объяснения и примеры.
Это получается что-то вроде условного размера в 1 байт. Что бы разные переменные находились в разных местах
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
04.10.2012, 23:12     sizeof для пустой структуры #9
V.A.L.I.D, верно, только тут больше подойдет слово объект, чем переменная. При этом размер может быть и не один байт, стандартом это не оговорено, просто выбрали 1 байт как наименьший размер.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2012, 23:17     sizeof для пустой структуры
Еще ссылки по теме:

sizeof - C++
Подскажите пожалуйста что делаю не так? в базовом классе gameElement, имеется матрица указателей на базовый класс: gameElement* arr; ...

sizeof() - C++
Ребята,объясните пожалуйста для чего нужен sizeof()?А то в книге очень заумно написано...

Operator sizeof - C++
Кто-нибудь знает как реализован этот оператор? И когда он выполняется: на уровне компиляции или во время исполнения?

sizeof() с массивами - C++
Почему такие результаты? Размеры у обоих массивов одинаковые а sizeof() показывает у одного 28, а другого 32 int a = {1, 2, 3, 4, 5,...

Sizeof выражение - C++
Почему при запуске, консоль сразу же закрывается: #include &lt;iostream&gt; int main() { float x = 1; cout &lt;&lt; &quot;sizeof (float): &quot;...


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

Или воспользуйтесь поиском по форуму:
Evg
04.10.2012, 23:17     sizeof для пустой структуры
  #10

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
Чей то вы ,товарищ, заговариваться начали
попросил модераторов, чтобы поправили

Yandex
Объявления
04.10.2012, 23:17     sizeof для пустой структуры
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru