0

如何打印用户输入的地址?这种方式行不通。

这是代码。谢谢。

#include <iostream>

using namespace std;

int main()
{
    int num = 123456;
    int *addr = &num;

    cout << "Var: num, address: " << &num << ", has: " << num << endl
         << "Var: *addr, address: " << &addr << ", has: " << addr << endl
         << "Printing value of num using the pointer *addr: " << *addr << endl;

    int addr_user;
    cout << "Type the memory address: "; cin >> addr_user;

    int *p_addr_user = (int *)addr_user;

    cout << "The address given (" << addr_user << ") has: " << *p_addr_user << endl;
    return( 0 );
}

对不起,我不是很清楚:

程序必须做什么:要求输入一个整数,从这些整数中打印内存地址,要求输入上面打印的内存地址,打印该内存地址的内容并确认该地址是否具有在步骤一中输入的数字。

一站式运行。先感谢您。

4

1 回答 1

1

我在Linux中试过这个:

g++ q.cpp 
q.cpp: In function ‘int main()’:
q.cpp:17:31: warning: cast to pointer from integer of different size [-Wint-to-pointer-    cast]
./a.out
Var: num, address: 0x7fff562d2828, has: 123456
Var: *addr, address: 0x7fff562d2818, has: 0x7fff562d2828
Printing value of num using the pointer *addr: 123456
Type the memory address: 0x7fff562d2828 
Segmentation fault (core dumped)

所以我注意到几个问题:

  1. 我自然想试试把num的地址放进去,但是显示的是16进制
  2. 段错误

要以十六进制输入,我将输入行更改为:

cout << "Type the memory address: "; cin >> hex >> addr_user;

(否则解释为 0)

但它仍然是段错误。

这是问题所在:

int *p_addr_user = (int*)addr_user;

哦,上面有一个警告。有时关于不同的大小(还要注意指针是无符号的。)

整数和指针的大小可以不同(这取决于您的平台)对我来说,int 是 32 位,指针是 64 位。

这是我如何让它工作的:

#include <stdint.h>
#...
uintptr_t addr_user;
cout << "Type the memory address: "; cin >> hex >> addr_user;
uintptr_t *p_addr_user =(uintptr_t*) addr_user;   
于 2013-04-09T16:46:45.043 回答