typedef到處都是,但是能夠真正懂得typedef使用的不算太多。對(duì)于初學(xué)者而言,看別人的源碼時(shí)對(duì)到處充斥的typedef往往不知所錯(cuò),而參考書(shū)又很少,所以在此給出一個(gè)源碼,供大家參考
#include <stdio.h>
#include <iostream.h>
/* 避免Visual C的for與標(biāo)準(zhǔn)for的不同 */
#define for if (0); else for
/* dim(a)是用于計(jì)算a的維數(shù),不過(guò)只能計(jì)算數(shù)組的維數(shù),不能計(jì)算指針的維數(shù) */
#define dim(a) (sizeof(a)/sizeof(a[0]))
/* N1到N4是幾個(gè)常量,以枚舉的形式定義 */
enum {N1 = 2, N2 = 3, N3 = 4, N4 = 5};
/* 這個(gè)C程序員都知道,就是將DataType定義為int型,便于擴(kuò)充 */
typedef int DataType;
/* 定義一個(gè)一維數(shù)組,數(shù)組的元素維整型值 */
typedef DataType ARR1[N4];
/* 再定義一個(gè)一維數(shù)組,數(shù)組的元素維ARR1型,不過(guò)ARR1又是一個(gè)數(shù)組,所以
* ARR2 實(shí)際上是一個(gè)矩陣
*/
typedef ARR1 ARR2[N3]; /* 此處完全等價(jià)為typedef int ARR2[N3][N4];*/
/* 按照ARR2的解釋,ARR3也是一個(gè)一維數(shù)組,不過(guò)數(shù)組元素的類型是ARR2的類型
* 所有ARR3是一個(gè)三維數(shù)組
*/
typedef ARR2 ARR3[N2]; /* 此處完全等價(jià)為typedef int ARR3[N2][N3][N4];*/
/* 分別用定義好的ARR1,ARR2,ARR3定義三個(gè)變量a, b, c */
ARR1 a; /* 此處完全等價(jià)于:int a[N4]; */
ARR2 b; /* 此處完全等價(jià)于:int b[N3][N4]; */
ARR3 c; /* 此處完全等價(jià)于:int c[N2][N3][N4]; */
/* 下面函數(shù)給大家個(gè)示例看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");
}
}
/* 下面函數(shù)給大家演示數(shù)組在內(nèi)存中的排列 */
void exam_2()
{
int *pn = NULL;
pn = (int *)a; /* 等價(jià)于 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; /* 等價(jià)于 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; /* 等價(jià)于 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;