Я компилирую приложение для 64-битной операционной системы Windows. Приложение должно сохранять 64-битные адреса, я должен выбрать тип переменной, чтобы сохранить их. Думал долго их спасать. Но sizeof(long) == 4
.Где и как сохранить адреса
64-битные адреса
Ответы (5)
Вы должны хранить адреса памяти в указателях:
void *myaddr = 0x0123456789ABCDEF; // memory address
int *myaddr2 = 0x0123456789ABCDEF; // pointer to int in memory, dereferencable
Вы можете получить адрес переменной следующим образом:
int myvar;
int *addrofmyvar = &myvar;
printf("%p", addrofmyvar); // use %p to print pointers
Примечание: существуют некоторые различия между C и C++ в отношении указателей (особенно указателей void). См. стандарты C и C++. Нет такой вещи, как "С/С++".
Если вы собираетесь хранить указатель как число, используйте uintptr_t
или intptr_t
. Они гарантированно соответствуют размеру и представлению указателя.
В противном случае вы не пишете переносимый код.
Вы должны использовать фактические указатели (на любой тип в адресе) для хранения адресов.
Я не пробовал, но, возможно, с длинным долгом будет работать.
Пожалуйста, проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.80%29.aspx
unsigned long long, 8 байт, эквивалентно unsigned __int64
диапазон: от 0 до 18 446 744 073 709 551 615
Не используйте LONG
или LONG LONG
при написании кроссплатформенного кода. LONG
не имеет одинакового размера на разных платформах/разных компиляторах.