什么时候应该使用指针分配给 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

现在,对于xy,您的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 mint nint jint k)都设置为 4。当您将 k 增加 1 时,它不会改变值存储在mnj。它只会改变k

【讨论】:

【参考方案3】:

我知道我的回答在这里会引起很多人的注意,但我可以把你在这里提出的问题联系起来,所以回复一下。

为了让您的编程简单,您可以尽可能避免使用指针。您最初编写的大多数程序根本不需要指针。

但是,当您开始编写复杂的程序时,您还需要尽可能缩短执行时间,您可能需要使用指针。

除了时间限制,还有很多其他地方会用到指针,例如当您想向/从函数传递/返回结构时。因为将结构作为值传递/返回会给堆栈带来负担。

但是,指针很复杂,如果您的系统确实没有任何内存/时间限制,您可能希望避免使用它们来编写简单的程序。

无论如何,您都可以谷歌(或阅读一些书籍)关于指针的更多信息。

【讨论】:

【参考方案4】:

*&的基本区别如下:* - 表示操作符的值 和& - 表示运营商的地址

【讨论】:

以上是关于什么时候应该使用指针分配给 int?的主要内容,如果未能解决你的问题,请参考以下文章

退出此函数后,为什么指针变量的值没有传递给指针参数?

将 int[][] 分配给 int** [重复]

求解答C语言“指针赋值”?

函数指针与指针函数

指针定义NULL后无法赋值?

将 Int 指针分配给 double 变量