С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

04.10.2012, 21:39. Просмотров 1426. Ответов 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? Ведь структура ничего не содержит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 21:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос sizeof для пустой структуры (C++):

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

Sizeof(.) или constexpr size_t tmp = sizeof(.) - C++
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения производительности? правильности?

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

Fwrite (buffer , sizeof(char), sizeof(buffer), pFile) - C++
как записать часть массива чаров? допустим у нас arr; мне надо записать с позиции массива 500 до 600, 100 байтов как записать эту...

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

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

9
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
04.10.2012, 22:10 #2
По стандарту размер класса ( структуры ) в C++ должен быть не нулевым.
1
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,828
Записей в блоге: 28
04.10.2012, 22:39 #3
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
Ведь структура ничего не содержит
Тем не менее переменная типа этой структуры будет в памяти занимать один байт. Такое требование выставлено из-за того, что две разные переменные НЕ должны иметь одинаковый адрес.
1
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 22:49  [ТС] #4
Цитата Сообщение от Evg Посмотреть сообщение
две разные переменные не должны иметь одинаковый адрес
Что-то не совсем это понимаю. То есть какая связь между размером переменной и ее адресом?
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,828
Записей в блоге: 28
04.10.2012, 22:53 #5
Ну, к примеру, переменная размером 10 байт положена по адресу 100, следующая переменная ляжет по адресу 100+10=110. А вот если бы размер был 0 вместо 10, то следующая переменная легла бы по тому же адресу 100
1
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,245
04.10.2012, 22:56 #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.
Чей то вы ,товарищ, заговариваться начали
1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
04.10.2012, 22:58 #7
ValeryS, это простая очепятка, конечно же, Evg имел ввиду 110.
0
v.a.l.i.d
413 / 378 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.10.2012, 23:03  [ТС] #8
Ага. Я все понял. Спасибо за объяснения и примеры.
Это получается что-то вроде условного размера в 1 байт. Что бы разные переменные находились в разных местах
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
04.10.2012, 23:12 #9
V.A.L.I.D, верно, только тут больше подойдет слово объект, чем переменная. При этом размер может быть и не один байт, стандартом это не оговорено, просто выбрали 1 байт как наименьший размер.
1
Evg
04.10.2012, 23:17     sizeof для пустой структуры
  #10

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2012, 23:17
Привет! Вот еще темы с ответами:

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

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

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

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


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

Или воспользуйтесь поиском по форуму:
10
04.10.2012, 23:17
Ответ Создать тему
Опции темы

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