通过地址

问题描述:

这一周改变指针的值,我们任务是创建一个程序,其中:通过地址

  • 程序显示阵列的地址和值
  • 用户输入他想改变
  • 相应的地址
  • 用户输入该地址

我能弄清楚如何指针作品新的价值,但它显示的另一号码,而不是输入值。 Results

下面的代码:

int j =1, var, nx; 
int array[4] = {3618, 6555, 5012, 1869}; 
int* pa; //pointer 
char choice; 
int remember = 0; 
pa = array; 

cout << endl; 
cout << "\t------------------------" << endl; 
cout << "\t\t Values" << endl; 
cout << "\t------------------------" << endl; 
for(int i = 0; i<4; i++){ 
    cout << "\tarray" << j; 
    cout << " = " << std::dec << *(pa + i); 
    cout << " (" << pa + i << ")" << endl; 
    j++; 
} 
cout << "\t------------------------" << endl << endl; 

cout << "\tPlease enter an address: "; 
cin >> hex >>var; 
cout << endl; 
cout <<"\tYou entered: " << hex << var << endl; 

cout << "\tPlease enter a new value: "; 
cin >> nx; 

pa = (int*)var; 
cout << endl; 
*pa = nx; 
pa = array; 

j=1; 
cout << endl; 
cout << "\t------------------------" << endl; 
cout << "\t\t New Values" << endl; 
cout << "\t------------------------" << endl; 
for(int i = 0; i<4; i++){ 
    cout << "\tarray" << j; 
    cout << " = " << std::dec << *(pa+i); 
    cout << " (" << &array[i] << ")" << endl; 
    j++; 
} 
cout << "\t------------------------" << endl << endl; 

问题是cin >> nx;正在读取值为十六进制。我很确定发生这种情况,因为之前在程序中使用的cin以十六进制形式读取值:cin >> hex >>var;。我观察到与测试时添加到程序中的cout声明相同的情况。

如果更改为cin >> std::dec >> nx;,程序的行为是正确的。

例如,使用测试运行:在十六进制353转换为十进制时是851

一个有用的提示为未来:你不需要j变量:在for循环里面,你可以只使用i + 1

+0

谢谢@GigaRohan!有用! – WilyFreddie

一个很好的习惯进入是用描述性的文字为你的变量。它使调试变得更容易,更重要的是了解发生了什么。现在

,如果我正确地解释这一点,你要设置pa等于叫var新指针,而不是设置pa等于varHere is a reference page on pointers,滚动到解除引用操作符来查看我在说什么。 (int *)是不必要的。

+0

注意! (int *)被放置为强制pa与变量类型int *兼容。没有它,会显示一个错误“将'int'赋值为'int *'的不兼容类型。 – WilyFreddie

OP看到的是hex修改器仍然有效。

cin >> hex >>var; 

打开hex。没有什么关闭了。

因此,当OP输入353时,程序将其解释为十六进制数字。 0x353 == 851

解决方案:

还原为十进制输入。

cin >> dec >> nx;