2013-10-28 21 views
1

我需要执行以下操作:分配数组的地址和打印值

假设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 

预先感谢您的帮助。我需要做什么来打印出正确的值?

+0

http://stackoverflow.com/questions/4532000/how-to-assign-pointer-address-manually-in-c-programming-language – PhillipD

回答

3

要解决的编译错误尝试

int* p=(int*)0xA0000000; 

不管这应该是有利于...

+0

我试过了,编译器吓坏了我。 – Inquirer

+0

有关此特定行的错误? –

+0

这就是它所说的:'fib1.exe':加载'C:\ Users \ Inquirer \ Documents \ Visual Studio 2010 \ Projects \ fib1 \ Debug \ fib1.exe',加载符号。加载'C:\ Windows \ SysWOW64 \ ntdll.dll',找不到或打开PDB文件 'fib1.exe':Loaded'C:\ Windows \ SysWOW64 \ kernel32.dll',Can not找不到或打开PDB文件 'fib1.exe':加载'C:\ Windows \ SysWOW64 \ KernelBase.dll',找不到或打开PDB文件 'fib1.exe':Loaded'C:\ Windows \ SysWOW64 \ msvcp100d.dll',符号已加载。 'fib1.exe':载入'C:\ Windows \ SysWOW64 \ msvcr100d.dll',加载符号。 – Inquirer

0

你不能在任意虚拟内存地址存放的东西。

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

尝试int *p = new int并打印您得到的地址。它将不如0xa0000000美丽,但它足以让你的实验可视化。

+2

_'你不能在任意虚拟内存地址存储东西。'这显然是错误的,如果你不能这样做会很糟糕(这会让我很难在EBI上连接一个FPGA寄存器接口) 。您不能在MPU保护的系统或在虚拟内存环境中运行进程的操作系统! –

+0

@ g-makulik我对C++标准并不是很满意,但我很肯定它会说类似于实现定义的东西(我倾向于猜测甚至未定义)。这意味着你通常不能解引用任意的“数字”。 OP在Windows上无法工作(没有WinAPI的帮助和运气,虚拟地址尚未保留)。 – typ1232

+1

你说关于存储/读取任意地址值的问题仍然很明显。它**在C++语法中是可能的,并且OP要求编译时错误!所以你的回答是超出问题的一步。 –