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

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

Войти
Регистрация
Восстановить пароль
 
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 749
#1

Поясните результат работы программы - C++

25.03.2013, 16:44. Просмотров 310. Ответов 4
Метки нет (Все метки)

Поясните, пожалуйста, результат следующей программы:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
struct A {
char a;
int b;
char c;
};
int main() {
std::cout << sizeof(A);
}
В итоге на экран выводится цифра 12. Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 16:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поясните результат работы программы (C++):

Определить результат работы программы - C++
16)Баллов: 1 Результат работы фрагмента программы char a, b, c; a='b'; b='c'; c=a; cout &lt;&lt; a &lt;&lt; b &lt;&lt; c &lt;&lt;...

Какой результат работы этой программы? - C++
int main(){ //(1) int var = 5; if(fork())wait(&amp;var); var++; printf(&quot;%d\n&quot;,var); return var; }

Объясните пожалуйста результат работы программы - C++
#include &lt;iostream&gt; using namespace std; int main() { short int i; short unsigned int j; j = 60000; ...

Объясните результат работы следующей программы - C++
double x =1.23456789; for(int i=0; i&lt;1030;i++) x=x/2; for( int i=0; i &lt;1030;i++) x=x*2; cout.precision (12); ...

Результат работы программы, запущенной в командной строке и в VS, отличается - C++
Здравствуйте. Не могу понять, каким образом результат выдало разный. Ведь текст абсолютно одинаковый! #include &lt;iostream&gt; ...

Не могу разобраться в коде. Некорректный результат работы программы - C++
Ввести с клавиатуры числа x, E . Последовательность a,a....a образована по закону a=3+ (1/(3^n))*sin(a-x)). Найти первый член, для которого...

4
fjay69
85 / 85 / 1
Регистрация: 26.10.2012
Сообщений: 248
25.03.2013, 16:51 #2
Это особенности размещения данных в памяти. По умолчанию, данные раскидываются в кластеры по 4 байта. То есть вышеприведённая структура будет выглядеть в памяти так:
C000IIIIC000, где C - char (1 байт), IIII - int (4 байта), 0 - пустой байт
Но если написать вот так:
C++
1
2
3
4
5
6
7
#pragma pack (push, 1)
struct A {
char a;
int b;
char c;
};
#pragma pack (pop)
данные разместятся так: CIIIIC
И тогда sizeof выдаст 6, как и положено.
1
ПростоЯ
184 / 101 / 1
Регистрация: 30.05.2009
Сообщений: 749
25.03.2013, 16:59  [ТС] #3
Цитата Сообщение от fjay69 Посмотреть сообщение
И тогда sizeof выдаст 6, как и положено.
но выводится же 12, а не 6
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2013, 17:07 #4
http://www.kalinin.ru/programming/cpp/31_07_00.shtml
http://habrahabr.ru/post/142662/
Использование #pragma pack(push,1)... pack(pop)
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
25.03.2013, 17:19 #5
Цитата Сообщение от ПростоЯ Посмотреть сообщение
но выводится же 12, а не 6
Директива #pragma есть implementation-defined, и если препроцессор компилятора не поддерживает ее, то то, что следует после pragma, он молча проглотит ничего не сделав.
Поэтому при использовании #pragma следует указывать компилятор (чего в статье на хабре кстати не сделано)).

в gcc можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
struct A {
char a;
int b;
char c;
}__attribute__((aligned(1),packed));
 
int main() {
std::cout << sizeof(A);
}
вывод 6.

Добавлено через 4 минуты
ну и для полноты поста, цитата из стандарта
16.6 Pragma directive

A preprocessing directive of the form
# pragma pp-tokensopt new-line
causes the implementation to behave in an implementation-defined manner. Any pragma that is not recog-
nized by the implementation is ignored.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 17:19
Привет! Вот еще темы с ответами:

Сохранить результат работы программы в файл с возможностью вывода на экран - C++
Добрый день, есть рабочая программа поиска кратчайшего пути. Мне нужно, чтобы она еще могла сохранять результат работы в файл. И при...

Из файла прочесть массив, а результат работы программы записать в файл - C++
На практике дали задание, в котором надо из файла прочесть массив, а результат работы программы записать в файл. Как это сделать? В...

Найти фрагмент поиска минимума (максимума) и сформулировать результат работы программы. - C++
помогите пожалуйста описать программку Найти фрагмент поиска минимума (максимума) и сформулировать результат работы программы. Char...

Простая и интересная задачка по C++: объяснить почему результат работы программы именно такой, какой он есть - C++
Всем привет, я сам ещё новичок в C++(&lt; 2 лет изучаю), но уже что-то понимаю и решил сделать задачу на основы языка для совсем зелёных, для...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
25.03.2013, 17:19
Ответ Создать тему
Опции темы

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