看《effetive c++》,發現未曾用typedef定義過數組,趕緊google學習考證下:
可以此代碼驗證:
23 #include "stdio.h"
24 #include "stdlib.h"
25
26 #define NUM 100
27
28 int main()
29 {
30 typedef char Adds[NUM];
31
32 Adds add1;
33
34 cout << sizeof(add1) / sizeof(char) << endl;
35
36 return 0;
37 }
期望輸出: 100 (NUM定義的值)
http://dev.csdn.net/htmls/18/18670.html
typedef到處都是,但是能夠真正懂得typedef使用的不算太多。對於初學者而言,看別人的源碼時對到處充斥的typedef往往不知所錯,而參考書又很少,所以在此給出一個源碼,供大家參考
#include <stdio.h>
#include <iostream.h>
/* 避免Visual C的for與標準for的不同 */
#define for if (0); else for (這個沒看懂)
/* dim(a)是用於計算a的維數,不過只能計算數組的維數,不能計算指針的維數 */
#define dim(a) (sizeof(a)/sizeof(a[0]))
/* N1到N4是幾個常量,以枚舉的形式定義 */
enum {N1 = 2, N2 = 3, N3 = 4, N4 = 5};
/* 這個C程序員都知道,就是將DataType定義爲int型,便於擴充 */
typedef int DataType;
/* 定義一個一維數組,數組的元素維整型值 */
typedef DataType ARR1[N4];
/* 再定義一個一維數組,數組的元素維ARR1型,不過ARR1又是一個數組,所以
* ARR2 實際上是一個矩陣
*/
typedef ARR1 ARR2[N3]; /* 此處完全等價爲typedef int ARR2[N3][N4];*/
/* 按照ARR2的解釋,ARR3也是一個一維數組,不過數組元素的類型是ARR2的類型
* 所有ARR3是一個三維數組
*/
typedef ARR2 ARR3[N2]; /* 此處完全等價爲typedef int ARR3[N2][N3][N4];*/
/* 分別用定義好的ARR1,ARR2,ARR3定義三個變量a, b, c */
ARR1 a; /* 此處完全等價於:int a[N4]; */
ARR2 b; /* 此處完全等價於:int b[N3][N4]; */
ARR3 c; /* 此處完全等價於:int c[N2][N3][N4]; */
/* 下面函數給大家個示例看a,b,c如何使用 */
void exam_1()
{
for (int i=0; i<dim(a); i++) a[i] = i+1;
for (int i=0; i<dim(b); i++) for (int j=0; j<dim(b[0]); j++)
b[i][j] = (i+1)*10 + (j+1);
for (int i=0; i<dim(c); i++) for (int j=0; j<dim(c[0]); j++)
for (int k=0; k<dim(c[0][0]); k++) c[i][j][k] = (i+1)*100 + (j+1)*10 + (k+1);
printf("/nThe a is :/n");
for (int i=0; i<dim(a); i++) printf("%4d ", a[i]);
printf("/n");
printf("/nThe b is :/n");
for (int i=0; i<dim(b); i++)
{
for (int j=0; j<dim(b[0]); j++) printf("%4d ", b[i][j]);
printf("/n");
}
printf("/nthe c is:/n");
for (int i=0; i<dim(c); i++)
{
for (int j=0; j<dim(c[0]); j++)
{
for (int k=0; k<dim(c[0][0]); k++) printf("%4d ", c[i][j][k]);
printf("/n");
}
printf("/n");
}
}
/* 下面函數給大家演示數組在內存中的排列 */
void exam_2()
{
int *pn = NULL;
pn = (int *)a; /* 等價於 pn = &a[0]; */
printf("/nThe a is :/n");
for (int i=0; i<sizeof(a)/sizeof(DataType); i++) printf("%4d ", pn[i]);
printf("/n");
pn = (int *)b; /* 等價於 pn = &b[0][0]; */
printf("/nThe b is :/n");
for (int i=0; i<sizeof(b)/sizeof(DataType); i++) printf("%4d ", pn[i]);
printf("/n");
pn = (int *)c; /* 等價於 pn = &c[0][0][0]; */
printf("/nThe c is :/n");
for (int i=0; i<sizeof(c)/sizeof(DataType); i++) printf("%4d ", pn[i]);
printf("/n");
}
int main(int argc, char* argv[])
{
exam_1();
exam_2();
return 0;
}