将数组分配给地址并打印值

时间:2013-10-28 20:28:21

标签: c++ arrays memory-address

我需要做以下事情:

假设C ++数组

int fib[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };

存储在32位机器上,存储器地址为0xA0000000(十六进制)。以下表达式的值是什么?

  fib     
  *fib     
  &fib[0]     
  &fib[6]     
  *(fib+7)

我尝试编写此代码以尝试打印出所需的值。

int main()
{
    int i = 0;
    int *p = &A0000000;
    cout << "i= " << i << endl;
    cout << "p= " << p << endl;
    *p = 0;
    cout << "i=" << i << endl;

    int &r = i;
    r = 0;
    cout << "i= " << i << endl;


    int fib[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    cout << "fib= " << fib << endl;

    cout << "*(*fib)= "  << *fib     <<  endl;
    cout << "&fib[0]= "  << &fib[0]  <<  endl;
    cout << "*(fib+7)= " << *(fib+7) <<  endl;
    cout << "&fib[6]= "  << &fib[6]  <<  endl;

    system("PAUSE");
    return 0;
} 

我收到以下错误消息:

c:\users\inquirer\documents\visual studio 2010\projects\fib1\fib1\fib1.cpp(7): error C2065: 'A0000000' : undeclared identifier

提前感谢您的帮助。如何打印正确的值需要做什么?

2 个答案:

答案 0 :(得分:3)

要修复编译错误,请尝试

int* p=(int*)0xA0000000;

无论这应该对...有什么好处。

答案 1 :(得分:0)

您无法在任意虚拟内存地址存储内容。

*p = 0;将在运行时崩溃,因为0xa0000000可能不是要写入的有效位置。

尝试int *p = new int并打印您获得的地址。它将不如0xa0000000漂亮,但它足以掩盖你的实验。