什么时候应该使用指针分配给 int?
Posted
技术标签:
【中文标题】什么时候应该使用指针分配给 int?【英文标题】:When should I use a pointer to assign to an int? 【发布时间】:2015-10-29 04:12:57 【问题描述】:为什么以及何时应该使用一种或另一种方法?我正在尝试更多地了解指针,但我无法理解这种使用场景。
int i = 12;
i += 1; // 13
i = 55; // 55
int x = 6;
int * y = &x;
*y += 1; // 7
*y = 91; // 91
我已经研究过这个问题,但找不到答案,因此在 SO 上发帖。我不是在问他们做什么之间的区别,我理解他们对记忆的影响。我不明白应该在上面的场景风格中使用哪个。更新了标题以反映这种误解。
【问题讨论】:
您在哪里看到类似示例后半部分的代码?是什么让你相信这是一种实际的做法?没有上下文,没有理由使用第二种技术,所以不可能真正弄清楚要告诉你什么。 【参考方案1】:每当需要间接访问对象时,您都会使用指针,例如:
在函数外声明的对象需要在函数内修改时(或将数组传递给函数时) 使用 malloc 或其他分配函数动态分配对象时 当您使用数据结构(例如链表、表格、树)时【讨论】:
【参考方案2】:int i = 12;
i += 1; // 13
i = 55; // 55
在您的示例中,您正在创建一个临时整数变量 i
并将值 12 存储在其中。然后,您将获取已存储在 i
(12) 中的值并将其加 1。
i += 1;
在你的情况下与 i = i + 1;
相同 i = i + 1
相当于这个数学:i = 12 + 1
然后,您将丢弃刚刚存储在 i
中的值并将其替换为 55。您已经覆盖了存储在临时变量 i 中的数据。
int x = 6;
int * y = &x;
*y += 1; // 7
*y = 91; // 91
现在,对于x
和y
,您的x
是一个临时整数变量,就像上面的i
。
但是,通过说int * y = [something];
,您声明了一个临时整数指针,指向某个整数的内存位置。通常是一些已经创建的变量的内存地址。设置 y 等于x
的地址,设置指针指向内存中x
的位置。在此设置下,取消引用y (*y)
将产生x
的值,而不是它的地址。如果您打印出y
,您将打印出x
的地址。如果您打印出*y
,您将打印出x
的值。 *y += 1
产生 x + 1
的值。将 *y
设置为 91 会重置 x
的值,就像您在上面使用 i
和 55 所做的那样。
请允许我通过一个例子来证明这个指针的用处。
假设您有 4 个整数指针都设置为指向x (&x)
的地址。在取消引用 (*ptr)
后更改这些指针中的任何一个的值将更改存储在 x 中的值,因此您已初始化为 @ 地址的其他 3 个指针中的 每个 指向的值987654350@.
相比之下,假设您有 4 个变量(int m
、int n
、int j
、int k
)都设置为 4。当您将 k
增加 1 时,它不会改变值存储在m
、n
或j
。它只会改变k
。
【讨论】:
【参考方案3】:我知道我的回答在这里会引起很多人的注意,但我可以把你在这里提出的问题联系起来,所以回复一下。
为了让您的编程简单,您可以尽可能避免使用指针。您最初编写的大多数程序根本不需要指针。
但是,当您开始编写复杂的程序时,您还需要尽可能缩短执行时间,您可能需要使用指针。
除了时间限制,还有很多其他地方会用到指针,例如当您想向/从函数传递/返回结构时。因为将结构作为值传递/返回会给堆栈带来负担。
但是,指针很复杂,如果您的系统确实没有任何内存/时间限制,您可能希望避免使用它们来编写简单的程序。
无论如何,您都可以谷歌(或阅读一些书籍)关于指针的更多信息。
【讨论】:
【参考方案4】:*
和&
的基本区别如下:*
- 表示操作符的值
和&
- 表示运营商的地址
【讨论】:
以上是关于什么时候应该使用指针分配给 int?的主要内容,如果未能解决你的问题,请参考以下文章