Адрес простого значения int - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь найти местоположение адреса в C определенной переменной, сейчас я пытаюсь написать код, который выглядит так:

#include<stdio.h>

int main()
{
        int g = 3;
        printf("%p %d %u ",&g,&g,&g);
        return 0;
}

теперь я запутался, почему компилятор GCC выдает мне предупреждение, используя эти:

Предупреждения

warning: format '%d' expects type 'int', but argument 3 has type 'int *'
warning: format '%u' expects type 'unsigned int', but argument 4 has type 'int *'

Также ответы довольно удивительны

0xbfa5953c -1079667396 3215299900

Теперь мой вопрос: что бы я принял в качестве местоположения для моего номера

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Выражение &g оценивается в одно и то же значение (поразрядно) в каждом случае. Это просто вопрос того, как эти биты должны быть интерпретированы .

Получается, что 0xbfa5953c (hex) == 3215299900 (dec), что вряд ли удивительно. Отрицательное значение не имеет смысла, поскольку адрес памяти не является целым числом со знаком .

0 голосов
/ 12 декабря 2011

Предполагая, что вы можете использовать C99, вы можете использовать:

#include <stdio.h>
#include <inttypes.h>

int main(void)
{
    int g = 3;
    printf("%p %" PRIdPTR " %" PRIuPTR "\n", &g, (intptr_t)&g, (uintptr_t)&g);
    return 0;
}

Все числа эквивалентны в том смысле, что они представляют ту же битовую комбинацию, что и адрес.Шестнадцатеричный код обычно является предпочтительным обозначением для адресов, но восьмеричное (не показано) также имеет длинную историю (но требует даже больше цифр, чем десятичного).

0 голосов
/ 12 декабря 2011

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

Обратите внимание, что это не точное (или даже близкое) местоположение в физической памяти - потому что почти все современные ОС сейчас используют виртуальную адресацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...