typedef使用大全1(陣列) (轉)

amyz發表於2007-08-15
typedef使用大全1(陣列) (轉)[@more@]

typedef到處都是,但是能夠真正懂得typedef使用的不算太多。對於初學者而言,看別人的原始碼時對到處充斥的typedef往往不知所錯,而參考書又很少,所以在此給出一個原始碼,供大家參考

 

#include :namespace prefix = o ns = "urn:schemas--com::office" />

#include

 

/* 避免Visual Cfor與標準for的不同 */

#define for  if (0);   else for

 

/* dim(a)是用於計算a的維數,不過只能計算陣列的維數,不能計算指標的維數 */

#define dim(a) (sizeof(a)/sizeof(a[0]))

 

/* N1N4是幾個常量,以列舉的形式定義 */

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];*/

 

/* 分別用定義好的ARR1ARR2ARR3定義三個變數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

 

  for (int i=0; ifor (int j=0; j

   b[i][j] = (i+1)*10 + (j+1);

 

  for (int i=0; ifor (int j=0; j

   for (int k=0; k

 

  printf(" The a is : ");

  for (int i=0; i

  printf(" ");

 

  printf(" The b is : ");

  for (int i=0; i

  {

   for (int j=0; j

   printf(" ");

  }

 

  printf(" the c is: ");

  for (int i=0; i

  {

   for (int j=0; j

   {

   for (int k=0; k

   printf(" ");

   }

   printf(" ");

  }

}

 

/* 下面函式給大家演示陣列在中的排列 */

void exam_2()

{

  int *pn = NULL;

 

  pn = (int *)a; /* 等價於 pn = &a[0]; */

  printf(" The a is : ");

  for (int i=0; i<sizeof(a)/sizeof(DataType); i++) printf("%4d ", pn[i]);

  printf(" ");

 

  pn = (int *)b; /* 等價於 pn = &b[0][0]; */

  printf(" The b is : ");

  for (int i=0; i<sizeof(b)/sizeof(DataType); i++) printf("%4d ", pn[i]);

  printf(" ");

 

  pn = (int *)c; /* 等價於 pn = &c[0][0][0]; */

  printf(" The c is : ");

  for (int i=0; i<sizeof(c)/sizeof(DataType); i++) printf("%4d ", pn[i]);

  printf(" ");

}

 

 

 

int main(int argc, char* argv[])

{

  exam_1();

  exam_2();

  return 0;

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958105/,如需轉載,請註明出處,否則將追究法律責任。

相關文章