[英]What does int** mean in C in this context?
這是上下文:
int *t[10];
int n;
我被告知tn
是 int** 類型。 我不完全明白 int** 是什么意思,它是指針的指針嗎? 為什么指針表的減法 - int 會給出一個 int 指針的指針? 當我們引用*t[0]
時,我們是否將int* p
引用到指針本身,因為它是表的一個元素,還是我們隱含地需要一個指向插槽的指針而不是指針指向另一個位置?
提前感謝您向我解釋這一點。
我不完全明白
int**
是什么意思,它是指針的指針嗎?
是的。
int
= integerint *
= 指向整數的指針int **
= 指向指針(指向整數的指針)int ***
= 指針指向(指針指向(指針指向整數))為什么指針表的減法 - int 會給出一個 int 指針的指針?
因為在 C(和 C++)中,數組會在必要時衰減為指向第一項的指針。 例如, int *t[10]
是一個包含 10 個指向 int 項的指針的數組。 t
可以衰減為指向t[0]
的指針,即指向 (pointer-to-int), int **
的指針。 然后可以將該指針用於指針算術(如減法)。
因此,從t
中減去n
會給你一個int **
,它指向你的 10 項數組的開頭“之前”的n
項(順便說一句,這不是一個安全的指針,除非n
為零或一個小的負數,因為它將指向數組內存的有效邊界之外)。
當我們引用
*t[0]
時,我們是否將int* p
引用到指針本身,因為它是表的一個元素,還是我們隱含地需要一個指向插槽的指針而不是指針指向另一個位置?
我不確定我是否理解這個問題。 由於t[10]
是一個由 10 個指針組成的數組(即 10 個int *
),這意味着t[0]
是該數組中的一個項目,因此具有int *
類型。 因此*t[0]
取消引用數組中的第一個指針,產生指針指向的實際int
值。
int**
是什么意思
它是指向int
的指針的類型。 如果您取消引用此類型的變量t
(例如: *t
),您將獲得一個指向int
的指針。 如果你取消引用它兩次(像這樣: **t
),你會得到一個int
。
如果你有TYPE a[N];
,數組表達式a
,如果求值,產生一個類型為T *
的指針,指向a[0]
。 這有時被稱為 C 的數組到指針“衰減”規則。
如果TYPE
是int *
,就像你的情況一樣,那么TYPE *
是int **
。
由於您的數組是int *
指針,因此索引到數組的指針必然是指向該元素類型的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.