簡體   English   中英

當我想改變變量的值時使用指針 *

[英]using pointer * when I want to change the value of a variable

#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,它也變了,所以我不知道它們之間有什么區別。 我感謝任何反饋,謝謝!

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

A:“x”和“*px”的值都變成了“8”,對嗎?

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

答:很酷。 所以現在“x”和“*px”都是 99。這是你所期望的,對嗎?

問:所以我不知道它們之間有什么區別。

在這個例子中,它們是等價的。 他們都完成了完全相同的事情。

為什么要使用指針? 因為變量“x”綁定到特定的 memory 位置:您無法更改它。

另一方面,如果需要,指針“px”可以在運行時更改為指向不同的memory位置。

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

  • 當你malloc() dynamic memory時,系統給你一個指針。 您不知道也不關心它在 memory 中的位置:您只是使用它。

  • 經常需要指針來遍歷鏈表中的元素

  • 遞增 (++) 和遞減 (--) 指針的能力簡化了許多算法

  • 等等等等

您可能會發現這些文章有幫助:

其他答案解釋了正在發生的事情,但在你的問題中,我還讀到你問“為什么”有人想使用引用而不是直接訪問 memory 地址。

計算機科學中的任何事情都是這樣的原因有很多,但我認為大多數人不會爭辯說這對開始理論理解有幫助:

許多計算機科學作為一門學科是資源的有效/最佳管理,在許多情況下是計算機 memory,但 I/O 和 CPU 構成了我們設法制作“好”軟件的另外兩個資源。 您可能還記得,一台簡單的計算機可以被認為是 CPU、RAM 和存儲,它們通過“總線”連接。

直到最近,大多數軟件還沒有在具有大量 RAM 的機器上運行。 出於性能目的,有必要對 memory 進行管理,盡管我們今天可以訪問更高級別的 memory 機器 - memory 仍然必須進行管理!

我們使用最近創建的抽象語言來管理這一點——或者在這種情況下,當我們高度確定地知道他們正在嘗試做什么時,我們會為他們做事。 我們將大部分資源管理被抽象和簡化的語言稱為“高級”語言。 您正在使用您的代碼與機器“對話”,該代碼處於相對於機器代碼的高控制級別(您可以將其視為二進制的 1 和 0)。

TLDR; Memory 是有限的,指針通常比它們指向的數據占用更少的空間,從而提高地址空間的利用效率。 它還允許許多其他整潔的東西,如虛擬化地址空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM