我何时应该使用指针分配给int?

时间:2015-08-06 06:43:43

标签: c pointers variable-assignment

为什么以及何时应该使用一种方法?我想了解有关指针的更多信息,但我无法理解这种使用场景。

int i = 12;
i += 1; // 13
i = 55; // 55

int x = 6;
int * y = &x;
*y += 1; // 7
*y = 91; // 91

我已经研究过这个问题,但找不到答案,因此关于SO的帖子。我不是在问他们做什么,我理解他们对记忆的影响。我不明白应该在上面的场景风格中使用哪个。标题已更新,以反映这种误解。

4 个答案:

答案 0 :(得分:0)

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

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

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

除了时间限制外,还有许多其他地方会使用指针,例如:当你想要传递/返回一个函数的结构时。因为传递/返回结构作为值会将负载放在堆栈上。

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

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

答案 1 :(得分:0)

每当需要间接访问对象时,您都会使用指针,例如:

  • 当函数外部声明的对象需要在函数内修改时(或者将数组传递给函数时)
  • 使用malloc或其他分配函数动态分配对象时
  • 当您处理数据结构(例如链接列表,表格,树)时

答案 2 :(得分:0)

    int i = 12;
    i += 1; // 13
    i = 55; // 55

在您的示例中,您正在创建一个临时整数变量i并将值12存储在其中。然后,您将获取已经存储在i(12)中的值,并将其加1。 我+ = 1;与i = i + 1相同;在您的情况下,i = i + 1等于以下数学公式: 我= 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的 value ,而不是x的地址。如果打印出y,则将打印x的地址。如果打印出* y,则将打印出x的值。 * y + = 1产生x + 1的值。将* y设置为91会重置x的值,就像上面对i和55所做的相同。

允许我通过示例演示该指针的有用性。

让我们说您有4个整数指针都被设置为指向x(&x)的地址。在取消对这些指针中的任何一个指针(* ptr)的更改之后,其值将更改存储在x中的值,从而更改您初始化的其他3个指针的 each 所指向的值X。

通过对比,可以说您有4个变量(int m,int n,int j,int k)都设置为等于4。将k加1时,它不会更改存储在m,n或j。只会改变k。

答案 3 :(得分:-2)

*和&之间的基本区别如下: * - 表示运算符的值 和 & -indicate operator

的地址