Разница между memcpy и присвоением элемента массива при сохранении указателя на целочисленный массивC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Разница между memcpy и присвоением элемента массива при сохранении указателя на целочисленный массив

Сообщение Anonymous »

Каковы различия между memcpy и присвоением элемента массива при сохранении указателя (8 байт) в целочисленном (4 байта) массиве?
Например, у меня есть массив из 32 целые числа (), и я хочу использовать размер памяти последних двух целых чисел ( и arr[31]) для хранения указателя (

Код: Выделить всё

p). Используя memcpy, я могу написать:
// store the pointer
auto address = reinterpret_cast(p);
std::memcpy(&Memory[30], &address, sizeof(address));

// retrieve the pointer
int *ptr;
std::memcpy(&ptr, &Memory[30], sizeof(ptr));

// test - succeed
assert(ptr == p);
Чтобы назначить элементы массива, я могу написать:

Код: Выделить всё

// store the pointer
auto address = reinterpret_cast(p);
Memory[30] = address[0];
Memory[31] = address[1];

// retrieve the pointer
int *ptr;
std::memcpy(&ptr, &Memory[30], sizeof(ptr));

// test - failed
assert(ptr == p);
Но кажется, что только первая версия дает мне правильный ответ, когда я проверяю ptr с помощью Assert(ptr == p).Почему вторая версия не работает?

Подробнее здесь: https://stackoverflow.com/questions/792 ... pointer-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»