我已经读过它意味着指向指针的指针。但是在下面的代码中,我能够更改地址的值。
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
}
然后就可以了。这怎么可能? **是指地址的值吗?
答案 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
分配值。