首页 > 解决方案 > 当我想更改变量的值时使用指针 *

问题描述

#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,它也改变了,所以我不知道它们之间有什么区别。我感谢任何反馈,谢谢!

标签: cpointersvariables

解决方案


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

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

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

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

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

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

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

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

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

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

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

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

  • 等等等等。

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


推荐阅读