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

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

Войти
Регистрация
Восстановить пароль
 
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
#1

Частичное пересекание структур в памяти - C++

30.04.2012, 21:28. Просмотров 358. Ответов 5
Метки нет (Все метки)

Есть две структуры:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct s1{
    char ax[40];
    char b[10];
    char c[15];
    int g;
    float v;
}
 
struct s2{
    char b[10];
    char c[15];
    int g;
    float v;
    char az[10];
}
Задача такая - нужно создать структуры так, чтобы элементы этих структур, названия которых совпадают, находились в одной и той же области памяти. Т.е. чтобы с элементов b по v включительно структуры пересекались в памяти и соответственно s1.b и s2.b, s1.c и s2.c, s1.g и s2.g, s1.v и s2.v лежали в одной области памяти.
Возможно ли такое сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 21:28     Частичное пересекание структур в памяти
Посмотрите здесь:

C++ Выделение памяти под массив структур
Выделение динамической памяти под массив структур C++
Массив структур в с++ C++
C++ Частичное решение
Массив структур C++
C++ Динамические массивы структур и выделение (перевыделение) памяти
C++ Выделение памяти под массив структур
Как расположены в памяти массивы структур? C++
Освобождение памяти, выделенной на динамический массив структур C++
Функция для очистки памяти, выделенную под массив структур C++
Динамическое выделение памяти под массив структур (new/delete) C++
C++ Выделение динамической памяти под массив структур

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
30.04.2012, 21:44     Частичное пересекание структур в памяти #2
Если нужно чтобы все элементы структур находились в памяти последовательно то нет.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
30.04.2012, 22:10     Частичное пересекание структур в памяти #3
как реализовать на С не знаю. думаю нереально.
на C++ можно было бы написать препроцессор, который подменит структуры гораздо более сложным содержимым - классами, которые будут смотреть в одно и то же место в памяти + методы в структурах с названиями b,c,g,v и т.д.
это что первое в голову пришло. вопрос только зачем?
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
30.04.2012, 22:15     Частичное пересекание структур в памяти #4
Чтобы пересекались при совпадении имен? Это наверное только препроцессором. Вообще, можно попробовать эти структуры засунуть в union - тогда одна структура на уровне ее членов наложится на другую структуру. Но в приведенном примере будет каша.
BRcr
 Аватар для BRcr
4004 / 2293 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
01.05.2012, 09:56     Частичное пересекание структур в памяти #5
Разве что, если указателями делать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct s1{
    char ax[40];
    char *b;
    char *c;
    int *g;
    float *v;
}; 
struct s2{
    char *b;
    char *c;
    int *g;
    float *v;
    char az[10];
};
Ну, а потом так:
C++
1
2
3
s1 s1_obj;
s2 s2_obj;
s1_obj.b = s2_obj.b = new char[10]; // и так далее
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
01.05.2012, 10:14     Частичное пересекание структур в памяти #6
Конечно, можно. С++ позволяет безболезненно добавлять поля в конец структуры. Остаётся только перенести az.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct s1
{
    char b[10];
    char c[15];
    int g;
    float v;
    char ax[40];
};
 
struct s2
{
    char b[10];
    char c[15];
    int g;
    float v;
    char az[10];
};
А чтобы именно посередине была общая часть - так не получится.
Yandex
Объявления
01.05.2012, 10:14     Частичное пересекание структур в памяти
Ответ Создать тему
Опции темы

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