簡體   English   中英

如何&a是一個指針,如果它生成一個?的地址?

[英]How &a is a pointer to a if it generates the address of a?

我是編程新手,目前我正在學習C中的指針。

  1. 我知道指針是包含或保存另一個變量的地址的變量。 今天當我用K&R更多地了解它時,我感到很困惑,在第80頁的給定函數交換(&a,&b)中,“&a是指向a的指針”。如何&a是指針? 它不是變量,而是變量的地址。 我對嗎?
  2. 我知道參數可以通過兩種方式傳遞給函數:按值調用和按引用調用。 參數的調用者值在第一個中沒有改變,但可以在第二個中改變。

我的問題是我已經讀過,如果我們想要改變變量的值,我們必須將指針傳遞給它(即我們想要修改的值的位置)。 這是什么意思? 我的意思是,我們必須傳遞指向函數的指針嗎? 聲明的含義是什么,“我們必須將指針傳遞給我們想要修改的位置”。

指針不是變量 指針是一個

C中的變量指定存儲位置,並且值可以存儲在該位置。 因此,如果你有一個用int a a聲明的變量a ,那么a是一個可以存儲整數值的變量。 如果你有一個變量int *x ,那么x是一個變量,其中可以存儲一個指向整數值的指針

可以使用&運算符獲取存儲位置的地址。 例如, &a是所指定的存儲位置的地址a地址 a ,並且可以被存儲在(除其他外)的相應類型的變量。 因此你可以:

int  a = 42;  /* a is a variable of type int,  and has value 42 */
int* x = &a;  /* x is a variable of type int*, and has value &a */

雖然編程中的類比通常很危險,但您可能會想到書中的頁碼等內容。 頁面的頁碼與頁面不同,但頁面編號仍然可以寫在頁面上。 例如,目錄頁面上寫有許多頁碼。 從而:

actual_page p = ...; /* a page structure */
page_number n = &p;  /* a page number    */

指針一個地址。 指針變量是保存地址的變量。

它可能類似於文字整數1和整數變量int a之間的差異。 有人可能將a1稱為整數,就像你可能將&aint* p稱為指針一樣。

還要注意&a不是左值並且不能分配 - 所以它就像你說的不是變量 ,但它仍然是一個指針,並且本身可以分配給指針變量。

如果a是某種類型T的變量,那么&a是一個表達式,它計算該變量的地址,也稱為該變量的指針 - 這些術語是可互換的。 &a的類型為T* ,發音為“指向T指針”。

int x = 4;   // 4 has type int, so we can assign it to an int variable.
int *p = &x; // &x has type int*, so we can assign it to an int* variable.

您可以修改指針傳遞的函數參數的原因是指針為變量引入了一種別名。 您可以直接(通過變量)或間接(通過指針)從多個位置更改它。

// modifying x modifies *p.
++x;
printf("%d %d\n", x, *p);

// modifying *p modifies x.
++*p;
printf("%d %d\n", x, *p);

正如其他人所觀察到的,指針是一種特定的 ,而不是一種特定的變量。

關於調用函數:

  1. 您不能在C中“將變量傳遞給函數”。如果在函數調用的參數列表中放入變量名,則傳遞存儲在該變量中的 ,而不是變量本身。

  2. 雖然在一般意義上,編程語言可以提供通過值或通過引用傳遞函數參數,但C 提供傳遞值。 但是,您可以通過將指針(值)傳遞到存儲另一個值的位置來模擬C中的引用傳遞。 這就是swap(&a, &b)作用:您傳遞的是存儲變量ab的值的位置(即指向這些值的指針)。

如何&a是一個指針,如果它生成一個?的地址?

C中的術語指針地址是同義詞。

創建變量時:

int a = 0; 

它在內存中的特定內存位置或地址中創建,具有足夠的內存來容納1個int

&a不生成地址,它只提供地址。

&運算符可用於設置指向特定位置的指針的地址,例如:

int a = 0;//a now exists in memory at a specific location;
int *b = {0}; // b is created in memory as a pointer, and can be assigned a location

b = &a; //b is assigned the location (address) of the variable a  

換句話說,在前一行中, &被稱為地址運算符,因此:

b = &x; 可以讀取:分配給b(指針)a的地址

  1. 指針包含地址 - 所以是同義詞。
  2. 當您通過引用傳遞時,您將傳入地址 - 以直接修改該值。

指針是一種將地址存儲到對象的變量。

基本上,指針是地址。

把它想象成一張紙。 當它上面印有數字時,它是一個integer (或其他數字類型)。
指針是一張紙,上面寫着“數據位於x位置的紙上”,其中“位置x”是對象的地址。

暫無
暫無

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

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