【问题标题】:using pointer * when I want to change the value of a variable当我想更改变量的值时使用指针 *
【发布时间】:2021-11-09 04:46:12
【问题描述】:
#include <stdio.h>

int main(void) {
  int x = 5;
  int y = 10;
  
  int* px = &x;
  int* py = &y;
  printf("the adress of %d is %p.\n",x,px);
  printf("the adress of %d is %p.\n",y,py);

  *px = 8;//change the value at the adress of px
  *py = 18;

  //what happens if instead of *px = 8, just x = 8?
  x = 99;
   
  printf("the adress of %d is %p.\n",x,px);
  printf("the adress of %d is %p.\n",y,py);
  //so It did change, what's the point of using *px when changing the value?
  return 0;
}

您好,我在学校开始学习C,遇到了一个可能非常简单的困难,但目前我不知道。 我正在尝试更改 x 的值,我首先使用方法 *px = 8 来更改它。 但是在那之后我使用了x = 99,它也改变了,所以我不知道它们之间有什么区别。 感谢您的任何反馈,谢谢!

【问题讨论】:

    标签: c pointers variables


    【解决方案1】:

    问:我先用*px = 8的方法改了

    A:“x”和“*px”的值都变成了“8”,对吗?

    问:但在那之后我使用了 x = 99,它也改变了

    答:很酷。所以现在 "x" 和 "*px" 都是 99。这是你所期望的,对吗?

    问:所以我不知道它们之间有什么区别。

    在这个例子中,它们都是等价的。他们都完成了完全相同的事情。

    为什么要使用指针?因为变量“x”与特定的内存位置相关联:您无法更改它。

    另一方面,如果需要,可以在运行时将指针“px”更改为指向不同的内存位置。

    为什么有用?有很多不同的原因。例如:

    • 当你malloc()动态内存时,系统会给你一个指针。你不知道也不关心它在内存中的位置:你只是使用它。

    • 通常需要指针来遍历链表中的元素

    • 递增 (++) 和递减 (--) 指针的能力简化了许多算法

    • 等等。等等

    您可能会发现这些文章很有帮助:

    【讨论】:

      【解决方案2】:

      其他答案解释了正在发生的事情,但在您的问题中,我还读到您问“为什么”有人要使用引用而不是直接访问内存地址。

      计算机科学之所以如此,有很多原因,但我认为大多数人不会认为这有助于初步理解理论:

      许多计算机科学作为一门学科是对资源的有效/优化管理,在许多情况下是计算机内存,但 I/O 和 CPU 构成了我们设法制作“好”软件的另外两种资源。您可能还记得,一台简单的计算机可以被认为是通过“总线”连接的 CPU、RAM 和存储。

      直到最近,大多数软件还没有在具有大量 RAM 的机器上运行。出于性能目的管理内存是必要的,尽管我们今天可以访问更高内存的机器 - 仍然必须管理内存!

      我们使用最近创建的抽象语言来管理这一点 - 或者在这种情况下,当我们高度确定地知道人们正在尝试做什么时,为他们做事。我们将大部分资源管理都抽象和简化的语言称为“高级”语言。您正在使用相对于机器代码的高级控制代码与机器“对话”(您可以将其视为二进制的 1 和 0)。

      TLDR;内存是有限的,并且指针通常比它们指向的数据占用更少的空间,从而提高地址空间利用率。它还允许许多其他简洁的东西,例如虚拟地址空间。

      【讨论】:

        猜你喜欢
        • 2014-01-27
        • 1970-01-01
        • 1970-01-01
        • 2018-08-19
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        相关资源
        最近更新 更多