typedef 數組 詳解一目瞭然

來源:互聯網
上載者:User

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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.