int **a[3][4] 和 size

BS的《C++編程》裡面講得很清楚,變數的申明,變數名稱的後面部分比前面部分具有更強的約束力。

所以,如下變數聲明: int **a[3][4]; 表示「int **」類型的二維數組(「[]」比「int」和「*」更具有約束力)。這個二維數組共有12個成員(3×4),每個成員是一個指針(int **),每個指針的長度是4(如果是32位電腦,其他位電腦可以類推)。所以,這個數組的長度為:12 × 4 = 48。

a是數組,不是指針 sizeof(a) == sizeof(int**)*3*4

a是數組,所以用sizeof(a)求值得話,應該是sizeof(int **)*3*4 =48 如果a作為參數傳遞給函數的時候,會自動退化為一個int** 的指針

fun( int **a ,int row ,int col); 在函數中使用sizeof(a)測量 值為4 = sizeof(int **)

我覺得a的基本類型是int**,大小不用說自然是4。[3][4]就有12個元素。4*12就是48了 64位機器還要翻一倍 (因為64位機器的指針長度為4*2=8位元組)

在這個例子中,a不是一個指針,而是一個數組名 數組名有兩個內部的含義: 1。數組首地址,(如果定義一個指向數組我指針的話,就指過來了) 2。數組佔有類型*個數的大小 因此,當你 int m_ia[4]; int *p=m_ia; sizeof(m_ia)  ==4*sizeof(int) sizeof(p)  ==4

首先要說明的 int **a[3][4] 的意思是定義一組指向指針變數的二維指針數組, 也就是說,定義了一個3行4列的指針數組,每個指針都指向一個指針, 從存儲結構上來說,就是一個存儲了12個指針變數的數組, 問題就在於摟主所說的「a佔多少位元組數?」 這裡的a指的到底是什麼, a本身實際含義是一個地址,表示a[3][4]這個數組的首地址, 就a作為一個個地址來說,它佔用4個位元組; 同時a也是a[3][4]這個數組一種表示, 如果用sizeof(a)去求解的話,它代表的是a[3][4]這個數組所佔用的空間, 而不是a這一個地址所佔用的存儲空間, 也就是12個指針變數所佔的空間,自然是48個位元組了. 這個說法是正確的,在這裡a指的就是a[3][4]這個數組,但如果: int a[3][4]; int *p=&(*a[3][4]); cout<<sizeof(p); 結果是4