C / C ++: Как правильно конвертировать & quot; unsigned int * & quot; значение в «unsigned int»?

У меня есть значение «unsigned int *», и мне нужно преобразовать его в простое «unsigned int»,
чтобы я мог передать его в функцию. Но, к сожалению,
когда я пытаюсь сделать простое приведение, значение меняется:

Code:

unsigned int * addr;

...

fprintf(stdout, "=== addr: %08x ===\n", addr); fflush(stdout);
fprintf(stdout, "=== casted addr: %08x ===\n", (unsigned int)addr);Output:

=== addr: fc880000 ===
=== casted addr: 400eff20 ===

Скажите, пожалуйста, как правильно преобразовать это значение, чтобы оно не менялось во время преобразования?

0

Решение

Просто использовать *addr, Это действительно и всегда должно работать. В случае, если вам нужно получить значение указателя вместо значения указал на по указателю вам понадобится больший тип. Как правило, значение unsigned int* 64 бит, в то время как unsigned int только 32 бит.

4

Другие решения

Когда вы объявляете указатель, как

unsigned int * addr;

Значение этого указателя будет адресом unsigned int это указывает на.

Когда вы хотите получить значение unsigned int это указывает на то, что вы используете оператор разыменования *:

unsigned int value = *addr;

Итак, что вы видите во второй строке вывода, это содержимое того, что addr указывает на.

1

Если у вас есть указатель какого-либо типа, и вам нужно преобразовать его только в тип, вам просто нужно указать указатель на другом месте.

void foo(unsigned int some_value);

...

int main()
{

unsigned int * addr = 0x12345678; // some address holding an unsigned int
foo(*addr);  // some function taking a unsigned int

Не нужно ничего вводить здесь, потому что вы не меняете тип. Обратите внимание, что в вашем коде «значение» не меняется:

// prints the address
fprintf(stdout, "=== addr: %08x ===\n", addr);

// prints the value at that address
fprintf(stdout, "=== casted addr: %08x ===\n", *(unsigned int *)addr);
1

Вы не меняете значение. В

fprintf(stdout, "=== addr: %08x ===\n", addr); fflush(stdout);

Вы получаете доступ к адресу указателя.

В

fprintf(stdout, "=== casted addr: %08x ===\n", *(unsigned int *)address);

Вы получаете доступ к указанному значению.

1
По вопросам рекламы [email protected]