Как правильно распечатать адрес переменной в памяти? - PullRequest
2 голосов
/ 08 марта 2019

Я пытаюсь понять, как структуры c или c ++ хранятся в памяти.

Я написал небольшую программу на С ++, скомпилировал и запустил ее в отладчике. Я использовал printf с% p и & variable, чтобы напечатать адрес, но распечатанный адрес и фактический адрес в памяти совершенно разные. фактически напечатанный адрес недействителен.

Есть идеи, как правильно распечатать реальный адрес переменной или структуры?

спасибо

вот исходный код программы, которую я написал:

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define XXX __asm__("nop");

int main(){
    XXX;
    XXX;
    const char *short_string = "this is a short string";
    const wchar_t *long_string = L"this is a long string";
    int a = 2;
    int b = 3;
    int c = a + b;
    int *pointer_to_a = &a;

    std::cout << "the address of short_string is: " << &short_string << std::endl;
    std::cout << "the address of long_string is: " << &long_string << std::endl;
    std::cout << "the address of a is: " << &a << std::endl;
    std::cout << "the address of a is: " << pointer_to_a << std::endl;
    std::cout << a << "+" << b << "=" << c << std::endl;
    std::cout << std::endl;
    XXX;
    XXX;
    getch();
    return 0;
}

это вывод скомпилированной программы: compiled program

это место в памяти переменных: debugger output

1 Ответ

7 голосов
/ 08 марта 2019

Чтобы напечатать местоположение вашей строки, вам необходимо: std :: cout << (void *) short_string; </p>

В вашем примере вы пишете адрес где ваша локальная переменная, которая находится в стеке

...