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

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

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

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

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

Выделение памяти под массив структур - C++
Добрый день. Подскажите в чём ошибка. #pragma hdrstop #pragma argsused #include <stdio.h> #include <iostream> struct...

Как расположены в памяти массивы структур? - C++
Допустим, есть такой массив структур struct Man { int year; int number; std::string name; } Men; Массив - это...

Выделение памяти под массив структур - C++
Возникла проблема в том что не могу никак эфективно реализовать выделение памяти под массив структур, более того: единожды выделив память я...

Освобождение памяти динамического массива структур - C++
Поставлена следующая задача: сделать любую структуру, сгененировать в неё рандомные данные, записать в бинарник. Потом считать из...

Освобождение памяти, выделенной на динамический массив структур - C++
Есть динамический массив структур. Как я понимаю, delete A не производит полной очистки памяти в данном случае, потому нужно использовать...

Выделение динамической памяти под массив структур - C++
Добрый день, уважаемые! Пишу функцию выделения памяти под массив структур. Но программа не хочет правильно работать. подскажите пожалуйста,...

5
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
30.04.2012, 21:44 #2
Если нужно чтобы все элементы структур находились в памяти последовательно то нет.
0
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
30.04.2012, 22:10 #3
как реализовать на С не знаю. думаю нереально.
на C++ можно было бы написать препроцессор, который подменит структуры гораздо более сложным содержимым - классами, которые будут смотреть в одно и то же место в памяти + методы в структурах с названиями b,c,g,v и т.д.
это что первое в голову пришло. вопрос только зачем?
0
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
30.04.2012, 22:15 #4
Чтобы пересекались при совпадении имен? Это наверное только препроцессором. Вообще, можно попробовать эти структуры засунуть в union - тогда одна структура на уровне ее членов наложится на другую структуру. Но в приведенном примере будет каша.
0
BRcr
4010 / 2299 / 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]; // и так далее
0
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];
};
А чтобы именно посередине была общая часть - так не получится.
0
01.05.2012, 10:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 10:14
Привет! Вот еще темы с ответами:

Выделение динамической памяти под массив структур - C++
Здравствуйте! Пытаюсь выделить память под массив структур, считать с клавиатуры, вывести на экран и удалить выделенную память. Подскажите в...

Динамические массивы структур и выделение (перевыделение) памяти - C++
Здравствуйте. Делаю систему обновления. С ftp и unicode разобрался. теперь встала проблема с сылками и размерностями массивов. В общем есть...

Динамическое выделение памяти под массив структур (new/delete) - C++
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет перечитал, во всех примерах код, подобный моему работает, а...

Функция для очистки памяти, выделенную под массив структур - C++
Как правильно очистить память в данном случае? Есть структура struct a { char *a1;//выделял память под строку char *a2; ...


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

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

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