使用**更改地址的值

时间:2016-05-21 09:05:58

标签: c++ pointers reference

我已经读过它意味着指向指针的指针。但是在下面的代码中,我能够更改地址的值。

int main() {

    int x = 23;           // initializing variable X = 23
    int *myVar = &x;      // Creating a pointer to the address of X
    *myVar = 566;         // My attempt at changing the value of X address
    cout << x << endl;    // Printing out X with new value

}

然后就可以了。这怎么可能? **是指地址的值吗?

2 个答案:

答案 0 :(得分:5)

这里*意味着两件不同的事情:

  • int *myVar = &x; *表示myVar是指针
  • *myVar = 566;此处*表示您访问指针指向的值

基本上,

int x = 23;           // 'x' is 23
int *myVar = &x;      // 'myVar' points to 'x'
*myVar = 566;         // Assign 566 to the value that 'myVar' is pointing at (which is 'x')
cout << x << endl;    // Print 'x'

你是正确的**意味着指针指针(或访问指针指针的值):

int a = 0; //'a' is 0
int* pa = &a; //'pa' is pointing to 'a'
int** ppa = &pa; //'ppa' is pointing to 'pa'

*pa = 1; //'a' is 1
**ppa = 2' //'a' is 2

答案 1 :(得分:0)

正如Theodoros Chatzigiannakis在评论中指出的那样,您的问题是错误的,因为在显示的代码中没有使用**

除此之外,您声明代码正在更改地址值的说法是错误的。原因是*在声明和语句(或表达式)中具有不同的含义。

声明(包括初始化)

int *myVar = &x;

myVar声明为指向int的指针,并将其初始化为&x的值(x的地址)。

声明

*myVar = 566; 

然后更改int中存储的地址的myVar,以获得值566。由于myVar之前已使用&x初始化,因此效果正在将x更改为值566。在这种情况下*被称为取消引用myVar - 它访问int地址存储在myVar中(在这种情况下,因为*myVar是赋值运算符的左侧,为int分配值。