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
本文出自 “燃燒技術的活力” 博客,請務必保留此出處http://boyishachang.blog.51cto.com/3485129/1273754