给指针指向的地址赋值? C

新手上路,请多包涵

所以如果一个星号在指针名之前,它指的是被指向的地址的值

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 许可协议

阅读 1.9k
2 个回答

确切的问题:你为什么写 *pointername = newValue; 而不是 pointername = newValue

这是两个完全不同的东西。 (你可以两者都做。)

 int i = 42;
int x = 23;
int * p = &i;

现在,我可以更改 我指向的位置的内容

 *p = 123; // this changes the value of i

或者我可以更改 _我指向的位置_。

 p = &x; // now p points to x instead


指针变量的“自然”值是内存地址。因此,如果我分配给“裸” p ,我正在分配一个内存地址(例如,我可以通过对变量使用 & 运算符来获得)。

使用运算符 * ,我 取消引用 指针变量。因此,如果我分配给“组合” *p ,我会分配一个指向类型的值(最终位于 p 中包含的内存地址)。

原文由 DevSolar 发布,翻译遵循 CC BY-SA 4.0 许可协议

让我们从:

 anInteger = 27;

而不是将其翻译为

1234 = 27

让我们把它写成

[1234] := 27

应该读作“地址 1234 的存储单元被赋值为 27 ”。

现在让我们考虑

pointer = &newValue;

显然(或者可能不是),我们将把它翻译成

[1238] := 1242

读作“地址 1238 的存储单元被赋值为 1242 ”。 (其中1242是 newValue 的地址)

现在 我们需要一种新的方法来编写语句,我们不想改变 pointer 变量本身的值,而是想改变 pointer 指向的变量.我们通过前缀 * 来做到这一点:

 *pointer = 17

它被翻译成如下内容:

 [[1246]] := 17

我们可以将其解读为“地址由存储单元 1246 的内容给出的存储单元被赋值为 17”。

真正难以保持笔直的是指针的值和它所指向的东西之间的差异。

原文由 Martin Bonner supports Monica 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏