Разница между 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

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