[英]Do pointers have a size?
在C ++中,當使用指向多維數組的指針時,
int arr[2][5];
int (*p)[5] = arr;
int*
與大小有什么不同,即int (*)[5]
?
對於任何特定的機器(虛擬或其他),指針總是相同的大小。 在32位機器上,指針是32位寬。 在64位機器上,它們是64位寬。 類似的規則適用於更具異國情調(按今天的標准)架構。
不同之處在於它們的類型不同。
int*
是指向int的指針; int (*)[5]
是指向5個int的數組的指針。 ( cdecl
程序對於解釋這些聲明非常有用。)
它很可能(但絕不保證)它們都具有相同的大小和表示。 任何兩種類型之間的差異在於可以應用於這些類型的對象的操作以及這些操作的含義。
在回答標題時,“指針有大小嗎?”,當然它們確實如此; sizeof
運算符會告訴您它是什么。 但5
在int (*)[5]
不是指針的大小; 它是指針指向的數組中的元素數。
如果你有
int *p = /* something */;
int (*q)[5] = /* something */;
那么* p是一個int,但* q是一個五個整數的數組,所以(* q)[0]是一個int。
你的'指針大小'是一個指針數組
在運行時期間沒有區別。 在編譯期間,它會被記住,無論指針是否是數組,以及它的大小,編譯器保證不會進行不適當的轉換。 如果我沒有弄錯的話,在這種情況下不適當的轉換是將公共指針轉換為數組指針。
此外,正如其他人所說,在運行時指針大小與平台有關。 在PC上,它們具有與int
相同的大小:32位平台上的4個字節,64位平台上的8個字節。
對於特定類型的機器,指針總是具有相同的尺寸。 指針在32位機器上的大小為4個字節。 它指向任何數據類型或任何數據類型的數組並不重要。 指針是變量,它保存任何對象的地址。
例如:
int main()
{
int x = 0;
int * p = &x;
int arr[2][5];
int (*pt)[5] = arr;
cout<<sizeof(p)<<endl;
cout<<sizeof(pt)<<endl;
return 0;
}
兩個指針都會得到4。
是的,一個poiner通常有一個int的大小。 您可以使用sizeof運算符檢查大小。 例如:
int* p = NULL;
int size = sizeof(p);
printf("size is %d\n",size);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.