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

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

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

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

04.10.2012, 21:39. Просмотров 1141. Ответов 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( char * ) & sizeof(char) C++
sizeof (double) C++
sizeof для класса C++
sizeof() C++
Для чего здесь создается пустой итератор eos C++
Для чего нужен Sizeof C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.10.2012, 22:10     sizeof для пустой структуры #2
По стандарту размер класса ( структуры ) в C++ должен быть не нулевым.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,769
Записей в блоге: 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
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,769
Записей в блоге: 26
04.10.2012, 22:53     sizeof для пустой структуры #5
Ну, к примеру, переменная размером 10 байт положена по адресу 100, следующая переменная ляжет по адресу 100+10=110. А вот если бы размер был 0 вместо 10, то следующая переменная легла бы по тому же адресу 100
ValeryS
Модератор
6451 / 4917 / 451
Регистрация: 14.02.2011
Сообщений: 16,312
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 / 51
Регистрация: 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 / 51
Регистрация: 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++
Есть ли в std, или где-нибудь ещё, константа для пустой строки (""), как endl (\n) для символа переноса? C++
C++ Fwrite (buffer , sizeof(char), sizeof(buffer), pFile)
C++ Sizeof(.) или constexpr size_t tmp = sizeof(.)
Sizeof структуры C++

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

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

Не по теме:

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

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

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