首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指向指针的澄清

指向指针的澄清
EN

Stack Overflow用户
提问于 2014-02-06 13:56:57
回答 16查看 12.4K关注 0票数 143

我在跟踪这个教程关于指针是如何工作的。

让我引述有关段落:

int i = 5, j = 6, k = 7; int \*ip1 = &i, \*ip2 = &j; 现在我们可以设置int **ipp =&ip1 1; ipp指向ip1,它指向i*ippip1**ippi,或者5。我们可以用我们熟悉的方框和箭头符号来说明这种情况,如下所示:

如果我们说

代码语言:javascript
运行
复制
 \*ipp = ip2;

我们已经将ipp (即ip1)指向的指针更改为包含ip2的副本,以便它(ip1)现在指向j

我的问题是:为什么在第二张图片中,ipp仍然指向ip1而不是ip2

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2014-02-06 14:04:09

别再提指点类比了。指针真正包含的是内存地址。&是运算符的“地址”,即它返回对象内存中的地址。*操作符给您一个指针引用的对象,即给定一个包含地址的指针,它在该内存地址处返回对象。因此,当您执行*ipp = ip2时,您要做的是将对象保存在ipp中的地址上,即ip1,然后将存储在ip2中的值分配给ip1,这是j的地址。

简单

& -地址

* ->值

票数 144
EN

Stack Overflow用户

发布于 2014-02-06 14:01:22

因为您更改了ipp所指向的值,而不是ipp的值。因此,ipp仍然指向ip1 (ipp的值),ip1的值现在与ip2的值相同,所以它们都指向j

这是:

代码语言:javascript
运行
复制
*ipp = ip2;

与以下相同:

代码语言:javascript
运行
复制
ip1 = ip2;
票数 43
EN

Stack Overflow用户

发布于 2014-02-06 16:11:46

与C标记中的大多数初学者问题一样,这个问题可以通过回到基本原则来回答:

  • 指针是一种值。
  • 变量包含一个值。
  • &运算符将变量转换为指针。
  • *运算符将指针转换为变量。

(从技术上讲,我应该说"lvalue“而不是”变量“,但我觉得将可变存储位置描述为”变量“更为明确。)

所以我们有变量:

代码语言:javascript
运行
复制
int i = 5, j = 6;
int *ip1 = &i, *ip2 = &j;

变量ip1包含一个指针。&运算符将i转换为指针,并将指针值赋值给ip1。因此,ip1包含指向i的指针。

变量ip2包含一个指针。&运算符将j转换为指针,并将该指针分配给ip2。因此,ip2包含指向j的指针。

代码语言:javascript
运行
复制
int **ipp = &ip1;

变量ipp包含一个指针。&运算符将变量ip1转换为指针,并将指针值赋值给ipp。因此,ipp包含指向ip1的指针。

让我们总结一下到目前为止的故事:

  • i包含5
  • j包含6
  • ip1包含“指向i的指针”
  • ip2包含“指向j的指针”
  • ipp包含“指向ip1的指针”

现在我们说

代码语言:javascript
运行
复制
*ipp = ip2;

*操作符将指针返回到变量中。我们获取ipp的值,它是“指向ip1的指针,并将其转换为变量。什么变量?当然是ip1!”

因此,这只是另一种说法。

代码语言:javascript
运行
复制
ip1 = ip2;

因此,我们获取ip2的值。那是什么?“指向j的指针”我们将指针值赋值给ip1,因此ip1现在是“指向j的指针”。

我们只改变了一件事:ip1的价值

  • i包含5
  • j包含6
  • ip1包含“指向j的指针”
  • ip2包含“指向j的指针”
  • ipp包含“指向ip1的指针”

为什么ipp仍然指向ip1而不是ip2

变量在分配给它时会发生更改。计算赋值;对变量的更改不能超过有赋值!首先分配给ijip1ip2ipp。然后将其分配给*ipp,正如我们所看到的,它的意思与“分配给ip1”的意思相同。因为您没有第二次分配给ipp,所以它没有改变!

如果您想要更改ipp,那么您必须实际分配给ipp

代码语言:javascript
运行
复制
ipp = &ip2;

例如。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21604946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档