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

Union - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Практика по с++ http://www.cyberforum.ru/cpp-beginners/thread452183.html
1)Дан массив целых чисел. Найти в этом массиве минимальный элемент m и максимальный элемент M. Получить в порядке возрастания все целые числа из интервала (m;M), которые не входят в данный массив 2)Дана матрица размером n x m. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (или один из них) оказался в верхнем левом углу. 3)Дана строка. Определить, сколько раз входит в...
C++ Матрица в классе, указатель на матрицу. Здравствуйте. Помогите, пожалуйста, с матрицей в классе. Вот то, что накалякал я. Matrix.h: class Matrix{ private: int n,m; double *arr; public: Matrix(int, int); void setMatrix(); ~Matrix(); http://www.cyberforum.ru/cpp-beginners/thread452170.html
Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. C++
Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. Аналогичные данные имеются и для женщин. Требуется составить такой набор пар, чтобы общество, получившееся из таких семей, было наиболее «счастливо». (Исходные данные задать самостоятельно).
C++ Ввод аргументов командной строки
Здравствуйте, такой вопрос: как задаются аргументы командной строки в си? нужно скомпилировать exe и запустить его через командную строку ОС, а после имени файла указать нужные мне аргументы? можно ли это сделать сразу в самой среде(в частности netbeans)? надеюсь более менее понятно написал...
C++ Перевод http://www.cyberforum.ru/cpp-beginners/thread452155.html
Здравствуйте , помогите перевести прогу с паскаля на с++. Это метод Гаусса. Буду благодарен uses CRT; Const maxn = 10;
C++ 3 задачки по с++ ребят выручайте нужно срочно сделать 3 задачки по с++ из 10 не могу сделать только их... выручайте делать нужно в Borland C++ на библиотеках conio и iostream 1.дан двумерный массива размерностью N*N. Найти сумму модулей элементов, расположенных ниже главной диагонали. 2. Двумерный массив задан последовательностью случайных чисел от 0 до М. Размерность массива определяется... подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
24.02.2012, 22:29     Union
Shandr_71, память никак не будет распределяться. Будет выделено ровно столько памяти, чтобы вместить максимальный тип. Любая переменная - просто некоторый набор битов. Если тип double имеет размер 8 байт (64 бита), а int - 4 байта (32 бита), то, разумеется, можно использовать младшие 32 бита переменной типа double под переменную типа int. Вот union и позволяет интерпретировать некоторый набор битов по-разному, в зависимости от наименования поля union. Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
union Foo
{
    char a;
    int b;
    double c;
};
 
int main()
{
    Foo bar;
    
    bar.a = 49;
    
    std::cout << bar.a << std::endl;
    std::cout << bar.b << std::endl;
    std::cout << bar.c << std::endl;
    std::cout << sizeof(bar) << std::endl;
    
    return 0;
}
У меня программа выводит:
Код
1
49
2.42092e-322
8
И a, и b, и c на самом деле расположены в одной и той же памяти размером 8 байт (размер типа double). Видно, что когда мы выводим char, значение 49 интерпретируется как символ и выводится символ '1' (с кодом 49). Когда мы выводим int, значение интерпретируется как целое и выводится 49, как и ожидалось. При выводе double на первый взгляд кажется, что там мусор, но нет, просто тип double хранится в особом формате, и тот набор битов, который сейчас записан в памяти, ассоциированной с переменной bar, интерпретируется именно как число 2.42092e-322.
 
Текущее время: 15:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru