所以如果一个星号在指针名之前,它指的是被指向的地址的值
int anInteger = 30;
int* pointer = &anInteger;
*pointer;
虽然在指针名称之前没有此运算符,但它指的是指针本身的值,即指针所指向的地址
pointer;
(如果我错了或者你只是想分享一些技巧,请纠正我:))对我来说,这意味着上面的代码可以被翻译成以下假设“myInteger”的地址是 1234:
int* pointer = 1234;
30;
1234;
现在让我感到困惑 - 因为变量指的是内存中的位置,而名称指的是变量,所以当你想使用指针间接更改变量的值时,你这样做对我来说很奇怪:
*pointer = 15;
因为这可以转换为 30 = 15,这看起来不是很有效..
此外,当您直接更改变量的值时,您可以这样做:
anInteger = 33;
其中“anInteger”将指代变量,从而指代内存地址,因此,我会将这段代码翻译为:
1234 = 33;
所以,正因为如此,在使用指针间接为变量分配新值时,为什么不这样做:
pointer = 33;
确切的问题:你为什么写 *pointername = 33;而不是指针名= 33?
原文由 user7926026 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是两个完全不同的东西。 (你可以两者都做。)
现在,我可以更改 我指向的位置的内容…
或者我可以更改 _我指向的位置_。
指针变量的“自然”值是内存地址。因此,如果我分配给“裸”
p
,我正在分配一个内存地址(例如,我可以通过对变量使用&
运算符来获得)。使用运算符
*
,我 取消引用 指针变量。因此,如果我分配给“组合”*p
,我会分配一个指向类型的值(最终位于p
中包含的内存地址)。