問題描述
- int *(*a)[3][4],求sizeof(a)、sizeof(*a)、sizeof(**a)、sizeof(***a)、sizeof(****a)
- int **a[3][4],求sizeof(a)、sizeof(*a)、sizeof(**a)、sizeof(***a)、sizeof(****a)
Tips:在32位機器下運行的結果,指針佔4個字節。
分析
問題1: int *(*a)[3][4]
[]的優先級高,所以這是一個3行4列的數組;
然後()的優先級高,所以(*a)是一個整體;
最左邊剩下int*,是數組中元素的類型。
總結:a是一個指向二維指針數組的指針
- sizeof(a) ,a是指針,它指向二維指針數組int* [3][4]。
佔4字節
- sizeof(*a),*a是二維指針數組 int* [3][4],3行4列數組存放int*類型數據。
佔3行*4列*4字節=48字節(由於int*佔4字節)
- sizeof(**a),**a是一維指針數組 int* [][4],它指向二維指針數組的列。
佔4列*4字節=16字節
- sizeof(***a),***a是數組元素 int*。
佔4字節
sizeof(****a),****a是整數 int。
佔4字節
由於指針大小爲4字節,容易與int的4個字節搞混,所以下面將數據類型換成char。
問題1擴展 : char *(*a)[3][4]
- sizeof(a) ,a是指針,它指向二維指針數組char* [3][4]。
佔4字節
- sizeof(*a),*a是二維指針數組 char* [3][4],3行4列數組存放char*類型數據。
佔3行*4列*4字節=48字節(char*佔4字節)
- sizeof(**a),**a是一維指針數組 char* [][4],它指向二維指針數組的列。
佔4列*4字節=16字節
- sizeof(***a),***a是數組元素。 char*
佔4字節
- sizeof(****a),****a是字符 char。
佔1字節
分析
問題2: int **a[3][4]
這是一個3行4列的數組,數組中的元素類型是int**。
- sizeof(a) ,a是整型指針數組int** [3][4],存放着3行4列的char**元素。
3行*4列*4字節=48字節
- sizeof(*a),*a是一維指針數組 int* [][4],它指向二維指針數組的列。
佔4列*4字節=16字節
- sizeof(**a),**a是數組元素 int**。
佔4字節
- sizeof(***a),***a是整型指針 int*。
佔4字節
- sizeof(****a),****a是整數 int。
佔4字節
問題2擴展 : char **a[3][4]
- sizeof(a) ,a是字符指針數組char** [3][4],存放着3行4列的char**元素。
3行*4列*4字節=48字節
- sizeof(*a),*a是一維指針數組 char* [][4],它指向二維指針數組的列。
佔4列*4字節=16字節
- sizeof(**a),**a是數組元素 char**。
佔4字節
- sizeof(***a),***a是字符指針 char*。
佔4字節
- sizeof(****a),****a是字符 char。
佔1字節
少了一對括號,結果差之甚遠。