簡體   English   中英

c 中的兩個語句有什么區別?

[英]What is the difference between the two statements in c?

希望你做得很好。

現在來到問題,如何

int *p1 = p2;

與......不同

int *p1 = &p2;

任何答案將不勝感激。

第一個賦值將 p1 設置為 p2 中的任何值。

第二個賦值將 p1 分配給 p2 的 memory 地址。

在比較這兩個代碼之前,您需要了解什么是指針。 在你了解指針是什么之前,讓我們先談談變量。

變量

變量是一個命名實體,它保存一個值,該值可能會隨時間變化。 該變量具有在創建時指定的類型,並且語言強制該變量將保存該值。

地址

現在我們了解了變量是什么,我們需要思考它是如何存儲在 memory 中的。 你有你的 RAM memory 並且你的變量必須在某個地方有它的值。 但是,如果您將變量的值隨機放入 memory 中的“某處”,而不知道在哪里找到它,那么該值以及變量都會丟失。 因此,當創建命名變量時,它在 memory(其地址)中的位置是已知的。 您可以通過使用前面的 & 運算符來獲取p2變量的地址,例如&p2 因此,第二個示例中的&p2意味着

p2的地址

指針

指針是一個變量,其類型是特定類型變量的地址。 當你定義

int *p1 = p2;

您基本上創建了一個名為p1的變量,它將保存一個int變量的地址。 在上面的示例中, p2也是一個int指針,保存一個int變量的地址,因此您可以初始化p1以保存p2的值(這是一個int的 memory 地址)。

區別

int *p1 = p2;

創建一個int指針,該指針將被初始化以保存p2的值作為其值,這也是一個int指針。

int *p1 = &p2;

創建一個int指針,該指針將被初始化以保存p2的地址作為其值,這可能是一個int變量。

- 第一個為指針賦值

-第二個分配 memory 地址給它,我們必須在想要獲取值時使用取消引用運算符。

首先,假設 p1 有一個值 10 分配給 p2 指針,如果 p1 更改它的值不會反映到 p2。

其次,假設 p1 有一個值 5,該值存儲在某個地址上,假設 6655 地址由 & 運算符訪問並分配給 p2,如果 p1 更改也反映了 p2。

暫無
暫無

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

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