我不明白t和p指標的區別。在t列印時,指標給出了相同的輸出t和*t僅使用時**t,我得到的價值。
它們之間有什么區別?
代碼是:
int main()
{
int B [2][3] = {
{2, 3, 6},
{4, 5, 8}
};
int *p = B;
int (*t)[3] = B;
printf ("%d\n", p);
printf ("%d\n", t);
printf ("%d\n", *p);
printf ("%d\n", *t);
printf ("%d\n", **t);
return 0;
}
輸出是:
6422000
6422000
2
6422000
2
uj5u.com熱心網友回復:
評論已經解決了使用正確格式說明符的重要性,但這里有一些其他需要考慮的點:
int *p是指向 的指標的單個實體int,因此它可以指向單個 的位置int:
int *p = &B[0][0];//assigning address of p to the location of a single integer value
但是int *p = B; 因為B不是單個int,應該導致警告。例如:
“警告:不兼容的指標型別用‘int [2][3] 型別的運算式初始化‘int *’”
此外,任務:
int (*t)[3] = B;
創建一個包含 3 個指向 的指標的陣列int,但僅用于初始化所創建的三個位置中的兩個,因為B被定義為只有 3 個元素的兩個實體
int B [2][3] = {{2, 3, 6}, {4, 5, 8}};
例如,在我的機器上,以下地址位置被分配給 t
t[0] == 0x0639FE94 //indicating location in memory of B[0]
t[1] == 0x0639FEA0 //indicating location in memory of B[1]
目前尚不清楚指向的是什么地址t[2]。
uj5u.com熱心網友回復:
寫入int *p = B;不是一個好主意,但無論如何,它將B, 2 的第一個元素的地址放入p. 所以,p輸出地址(6422000)并*p輸出2。到這里一切都很好。
什么是t?它是一個指向陣列的指標,B。當你列印它時會發生什么,你會得到地址B,它總是也是它的第一個元素的地址,恰好是 6422000。那么,當你取消參考時會發生什么t?B在這種情況下,您將獲得和陣列,然后它將衰減為一個指標并為您提供記憶體地址。并且 的記憶體地址B是 6422000。并且**t會解參考解參考的陣列。B參考陣列是,它將衰減為指標,在這種情況下為 6422000,并且將再次取消參考,給出 2。
基本上:
p:B, 2 的第一個元素的地址。*p:取消參考p,在本例中為 2。t: 地址到B。陣列的地址也是它的第一個元素的地址,相當于p.*t: 取消參考到B,B將衰減到它的第一個元素的指標,相當于p。**t: 取消參考*t,即 2。
注意:我知道,第一個元素B是{2, 3, 6},而不是 2。我將 2 稱為“第一個元素”。這是不準確的,但為了解釋的目的,我不得不使用這個術語。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/389132.html
