Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
1

Вопрос по структурам

09.03.2014, 13:20. Просмотров 908. Ответов 1
Метки нет (Все метки)


Насколько я знаю можно заполнить структуру "наложив её на память", например
C
1
2
3
4
5
struct A {
   int a;
   char b[2];
   char c;
}
теперь если этой структуре присвоить 7 байт, то они распределятся правильно 4, 2, 1.
Но вопрос первый, как это сделать, в второй, что будет с указателями?
например есть
C
1
2
3
4
5
struct A {
   int a;
   char b[2];
   char *c;
}
Что будет с "c" ?
Не знаю, правильно ли я организовал вопрос, 3 раза переписывал )))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2014, 13:20
Ответы с готовыми решениями:

вопрос по структурам
Задача.На основе данных входного файла составить список студентов,включающий фамилию,факультет,...

Вопрос по структурам
Всем доброго дня. Возникло парочку вопросов по изучению С++ подскажите если не сложно. Купил...

вопрос по структурам
Я начал писать программу на следующию задачу Описать структуру с именем STUDENT, содержащую...

небольшой вопрос по структурам
Плиз, подскажите как присвоить значение переменной(index) элементу массива структуры(avto.chet)....

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
1
DU
1492 / 1138 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
09.03.2014, 13:49 2
Лучший ответ Сообщение было отмечено OrmaJever как решение

Решение

вариант один:
у вас есть объект типа A и массив байт.
берете и копируете все байты из массива по адресу этого объекта:
C++
1
2
3
4
A a;
char bytes[sizeof(A)];
// заполняем массив байт
memcpy(&a, bytes, sizeof(A));
вариант два:
Обекта нет. есть только указатель на кусок памяти.
Берем этот указатель и кастим его к указателю на структуру
C++
1
2
3
void* ptr = ...
A* aPtr = (A*) ptr;
aPtr->a = 666; // записываем туда что-то.
В случае указателей:
указатель в 32 битной системе занимает 4 байта. и в этих четырех байтах
какой-то адрес. Если вы этот указатель перезапишите своими байтами,
то они конечно образуют какое-то значение, которое будет интерпретироваться
как адрес. но вот обращение по такому адресу может привести к краху проги,
если адрес будет указывать непонятно куда.

И еще структура не обязательно будет состоять из 7 байт, даже если сумма
размеров отдельных мемберов составляет 7. Компилятор может скомпоновать
такую структуру с учетом всяким там выравниваний. Размер может оказаться
больше.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2014, 13:49

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Вопрос по структурам,массивам,постройка календаря
Прощу помочь оптимизировать данную программу, в процессе компиляции программа долго...

Вопрос по структурам в Си
Здравствуйте. Интерисует следующий вопрос по структурам. Имеется некая структура: struct...

Курсовая по структурам
Подскажите какую-нибудь интересную тему для курсовой. Главная тема сема списки и структуры , можно...

задания по структурам
помогите пожалуйста новичку... буду ОЧЕНЬ благодарен

задание по структурам
Вот задача Создать структуру с именем employee, содержащую два поля: номер со¬трудника типа int...

программа по структурам
помогите написать программу В файл base.txt поместить информацию о писателях и их произведениях...


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

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

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