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

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

Войти
Регистрация
Восстановить пароль
 
icpu
323 / 228 / 43
Регистрация: 10.03.2011
Сообщений: 1,091
Записей в блоге: 2
#1

[Теория] Преобразование Struct * <=> Type * - C++

03.03.2013, 17:52. Просмотров 227. Ответов 1
Метки нет (Все метки)

Здравствуйте, Господа и Дамы.
Немного теории, коротко и без зевоты.

Итак, есть структура с однотипными переменными.
C++
1
2
3
4
struct coordinat3f{ 
float x, y, z;
};
coordinat3f coord;
и есть указатель на переменные того же типа
C++
1
float * f;
Проведём простой
C++
1
f = reinterpret_cast < float * > ( &coord );
и напишем что-нить вроде
C++
1
cout << f[0] << ' ' << f[1] << ' ' << f[2] << endl;
Взлетит ли велосипед (у меня на тестовом обрезке вроде взлетал)? Будет ли здесь undefined behaviour? И что будет, если структура возымеет функции-члены?
C++
1
2
3
4
struct coordinat3f{
float x, y, z;
coordinat3f operator= (const coordinat3f);
}
Сразу отсекаю структуры с разносольем: все переменные строго одного типа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 17:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [Теория] Преобразование Struct * <=> Type * (C++):

std::bind1st: is not a class, struct, or union type - C++
Добрый день, пытаюсь найти элемент в списки указателей на объекты классачерез предикат. Вот упрощенный пример: #include &lt;algorithm&gt; ...

Ошибка type qualifier 'std' must be a struct or class name - C++
а у меня на эту строку typedef std::string T_str; выдается ошибка type qualifier 'std' must be a struct or class name что делать? ...

error C2228: left of '.add' must have class/struct/union type. в чем ошибка? - C++
Помогите понять в чем ошибка. Пасиб. #include &lt;iostream.h&gt; class book { private: char name_book; char name_avtor; ...

Incomplete type used in nested type specifier - Итерация по списку аргументов - C++
Здравствуйте! Пытаюсь написать утилитарную структуру для применения шаблонной функции на списке аргументов. #include &lt;tuple&gt; ...

E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary' - C++
Здравствуйте, уважаемые форумчане, выкидываю код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;windows.h&gt; class Binary { ...

С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить? - C++
Написал программу для расчёта площади четырёхугольника и круга. Использовал простые операторы присвоения. Всё работало как надо. Но...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.03.2013, 18:17 #2
К первому элементу вы точно можете обратиться таким образом (9.2/21). Да и то, если это обычная сишная структура. В остальных случаях — не обязательно. В принципе, ничто не удерживает компилятор от влепливания паддинга между полями. Элементы массива он обязан размещать строго последовательно, но поля одного типа это не массивы (хоть 99%, что паддинга не будет). Ну и если это не обычная сишная структура (определение см. в 9/7 того же стандарта), то даже к первому элементу нельзя так обращаться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 18:17
Привет! Вот еще темы с ответами:

Could not convert variant of type (Null) into type (String) - C++
if(DBLookupComboBoxDoctor-&gt;ListField.IsEmpty()) ...

Mix of type 'bool' and type 'float' - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { float x,y,i; for(i=1;i&lt;5;++i) { ...

Argument of type char is incompatible with parameter of type char * - C++
Столкнулся с ошибкой, не получается никак исправить #define DUTIES 100 class POSITIONDLL_API Position { private: char...

typedef struct{} *type; - C (СИ)
правильно ли я поступаю? Правильно ли выделяю память? требуется ли здесь typedef? В конечном итоге мне нужен будет массив из...


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

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

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