[英]How &a is a pointer to a if it generates the address of a?
我是編程新手,目前我正在學習C中的指針。
我的問題是我已經讀過,如果我們想要改變變量的值,我們必須將指針傳遞給它(即我們想要修改的值的位置)。 這是什么意思? 我的意思是,我們必須傳遞指向函數的指針嗎? 聲明的含義是什么,“我們必須將指針傳遞給我們想要修改的位置”。
指針不是變量 。 指針是一個值 。
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
之間的差異。 有人可能將a
和1
稱為整數,就像你可能將&a
和int* 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);
正如其他人所觀察到的,指針是一種特定的值 ,而不是一種特定的變量。
關於調用函數:
您不能在C中“將變量傳遞給函數”。如果在函數調用的參數列表中放入變量名,則傳遞存儲在該變量中的值 ,而不是變量本身。
雖然在一般意義上,編程語言可以提供通過值或通過引用傳遞函數參數,但C 僅提供傳遞值。 但是,您可以通過將指針(值)傳遞到存儲另一個值的位置來模擬C中的引用傳遞。 這就是swap(&a, &b)
作用:您傳遞的是存儲變量a
和b
的值的位置(即指向這些值的指針)。
如何&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的地址 。
指針是一種將地址存儲到對象的變量。
基本上,指針是地址。
把它想象成一張紙。 當它上面印有數字時,它是一個integer
(或其他數字類型)。
指針是一張紙,上面寫着“數據位於x位置的紙上”,其中“位置x”是對象的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.