Описание тега pointer-conversion
Преобразование указателя - это термин, в основном связанный с языками C и C++, когда указатель на один тип преобразуется в указатель другого типа.
1
ответ
Почему нельзя приводить Derived T::* в Base T::*?
Предпосылки. Многие функциональные языки поддерживают алгебраические типы данных, которые в некоторой степени можно эмулировать с помощью виртуальных функций и наследования. Наиболее очевидное решение заключается в распределении кучи, поскольку прои…
13 окт '14 в 10:59
1
ответ
reinterpret_cast в C++
uint32_t r,g,b; r = (uint32_t)145; g = (uint32_t)131; b = (uint32_t)139; uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b); float rgbf = *reinterpret_cast<float*>(&rgb); uint32_t rgbnew = *(reinterpret_cast&l…
05 янв '13 в 13:37
1
ответ
Преобразование указателя в указатель в константу
Я читаю книгу под названием C++ Gotchas, в которой объясняются преобразования между константными указателями, и у меня возникают некоторые проблемы с пониманием следующих правил: Два типа указателей T1 и T2 похожи, если существует тип T и целое числ…
21 дек '11 в 05:22
1
ответ
Безопасно ли приводить указатель к целому числу, увеличивать его и возвращать обратно?
Предположим, у меня есть действительный указатель p0: T a[10]; T* p0 = &a[0]; Я знаю, что могу смело туда-обратно разыграть это так: reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(p0)) == p0; Но безопасно ли делать следующее? T* p1…
21 май '15 в 09:42
1
ответ
Указатель / целочисленное арифметическое (не) определенное поведение
У меня есть следующий шаблон функции: template <class MostDerived, class HeldAs> HeldAs* duplicate(MostDerived *original, HeldAs *held) { // error checking omitted for brevity MostDerived *copy = new MostDerived(*original); std::uintptr_t dist…
12 авг '14 в 13:39
1
ответ
Передача константного указателя по ссылке
Я смущен, что почему следующий код не может скомпилировать int foo(const float* &a) { return 0; } int main() { float* a; foo(a); return 0; } Компилятор выдает ошибку как: ошибка: неверная инициализация ссылки типа 'const float*&' из выражения ти…
17 июл '12 в 00:57
1
ответ
Доступ к первому полю структуры в объединении структур
У меня есть три структуры, которые разделяют первый тип и имя первого поля: struct TYPEA { char *name; int x,y; /*or whatever*/ }; struct TYPEB { char *name; float a[30]; /*or whatever*/ }; struct TYPEC { char *name; void *w,*z; /*or whatever*/ }; Е…
11 сен '17 в 12:20
2
ответа
Правильный тип для динамического массива константных строк
У меня всегда было впечатление, что const char **x был правильный тип для использования для динамически распределенного массива константных строк, например, так: #include <stdlib.h> int main() { const char **arr = malloc(10 * sizeof(const char…
23 мар '17 в 06:16
1
ответ
Приведение указателя: может ли указатель иметь значение?
Указатель может иметь значение?? так в каком случае это используется int num=100; int* iptr=NULL; iptr=reinterpret_cast<int*>(num); printf("%d \n",num); printf("%d \n",num); результат 100 100
08 окт '18 в 11:24
1
ответ
C++ неявное преобразование типа указателя
Рассмотрим этот случай: int *ptr; int offset; ptr = <some_address>; offset = 10; Предположим, что offset является 32-битной переменной ptr имеет тип int*целевая архитектура является 64-битной (так ptr является 8-байтовой переменной), offset им…
07 май '15 в 08:25
3
ответа
Преобразование из производного ** в базу **
Я читал это и, к сожалению, не мог глубоко понять, почему компилятор не позволяет преобразование из Derived** в Base**. Также я видел это, которое дает не больше информации, чем ссылка на parashift.com. РЕДАКТИРОВАТЬ: Давайте проанализируем этот код…
06 ноя '11 в 08:59
1
ответ
Преобразование в C++: указатель на член объекта, вычисление указателя на объект
C++ имеет static_cast преобразовать base_class_pointer в derived_class_pointer, Это очень похожая операция для преобразования object_data_member_pointer в object_pointer, Я написал функцию ConvertDataMemberPtrToObjectPtr используя небезопасное преоб…
14 дек '13 в 06:37
2
ответа
Законно ли реализовать наследование в C, приводя указатели между одной структурой, которая является подмножеством другой, а не первого члена?
Теперь я знаю, что могу реализовать наследование, приведя указатель к struct к типу первого члена этого struct, Однако, как опыт обучения, я начал задаваться вопросом, возможно ли реализовать наследование немного по-другому. Законен ли этот код? #in…
20 май '17 в 05:36
1
ответ
Передача протокола Swift указателю Objective-C
Использование XCode 10.1 / Swift 4.2. Я пытаюсь назначить объект, соответствующий протоколу Swift, указателю Objective-C. Следующий код представляет собой минимальный пример, который компилируется и работает как положено, но он дает мне следующие пр…
28 янв '19 в 18:43
2
ответа
Преобразование типов с помощью указателей
Я в недоумении, чтобы понять, как приведение типов работает с указателями double x = 0.7; int *ptr = (int *)&x; Что происходит с *(байт ) & x? & x означает адрес переменной x. Тогда что означает типизация адреса? Может теперь ptr также относится…
12 июн '14 в 10:40
1
ответ
Преобразование массива uchar в указатель типа uint8
Я хочу конвертировать массив uchar в указатель uint8. Поскольку оба имеют 8 битов и диапазоны значений от 0 до 255, я не думаю, что это должно быть причиной и проблемой. uchar list[100]; Я должен передать вышеупомянутый список функции, которая прини…
23 мар '14 в 05:48
1
ответ
Ошибка компиляции Protobuf-2.6.1 на Solaris 10 SPARC 64
При попытке скомпилировать Protobuf-2.6.1 на Solaris 10 SPARC 64 я получаю: ./google/protobuf/stubs/once.h: In function `void google::protobuf::GoogleOnceInit(google::protobuf::ProtobufOnceType*, void (*)())': ./google/protobuf/stubs/once.h:125: err…
02 дек '15 в 07:43
1
ответ
Совместимость типа указателя на функцию C
Создавая библиотеку, которая работает с обратными вызовами функций, я часто приводил (и вызывал) указатели на типы функций к типам с одинаковым соглашением о вызовах и одинаковыми сигнатурами, но с одним исключением: у них были параметры, указывающи…
04 янв '15 в 16:00
1
ответ
Функция полиморфизма C++, принимающая void * и другой тип указателя в качестве аргумента: считается ли она неоднозначной?
C++ полиморфизм функций, принимающих void * и другой тип указателя в качестве аргументов: считается ли он неоднозначным? Я обеспокоен тем, что любой указатель может быть приведен к void*, будет ли выполняться второй вызов бара ниже void bar(void*) в…
13 ноя '15 в 10:36
1
ответ
C++: является ли reinterpret_cast лучшим выбором в этих сценариях?
Это очень долго мучало меня: как сделать преобразование указателя из чего угодно char * записать двоичный файл на диск. В Си ты даже не думаешь об этом. double d = 3.14; char *cp = (char *)&d; // do what u would do to dump to disk Тем не менее, …
25 апр '19 в 06:37