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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 21:39     sizeof для пустой структуры #1
Есть такая небольшая программа
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++
C++ Оператор sizeof
sizeof() с массивами C++
sizeof C++
sizeof( char * ) & sizeof(char) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.10.2012, 22:10     sizeof для пустой структуры #2
По стандарту размер класса ( структуры ) в C++ должен быть не нулевым.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
04.10.2012, 22:39     sizeof для пустой структуры #3
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
Ведь структура ничего не содержит
Тем не менее переменная типа этой структуры будет в памяти занимать один байт. Такое требование выставлено из-за того, что две разные переменные НЕ должны иметь одинаковый адрес.
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
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
04.10.2012, 22:53     sizeof для пустой структуры #5
Ну, к примеру, переменная размером 10 байт положена по адресу 100, следующая переменная ляжет по адресу 100+10=110. А вот если бы размер был 0 вместо 10, то следующая переменная легла бы по тому же адресу 100
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
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
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.10.2012, 22:58     sizeof для пустой структуры #7
ValeryS, это простая очепятка, конечно же, Evg имел ввиду 110.
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 23:03  [ТС]     sizeof для пустой структуры #8
Ага. Я все понял. Спасибо за объяснения и примеры.
Это получается что-то вроде условного размера в 1 байт. Что бы разные переменные находились в разных местах
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 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++
sizeof() C++
Для чего здесь создается пустой итератор eos C++

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

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

Не по теме:

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

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

Текущее время: 18:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru