青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

typedef使用大全

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

 

#include <stdio.h>

#include <iostream.h>

 

 

/* 避免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<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;

}

續 數組

#define S(s) printf("%s\n", #s); s

 

typedef struct _TS1{

    int x, y;

} TS1, *PTS1, ***PPPTS1;  // TS1是結構體的名稱,PTS1是結構體指針的名稱

// 也就是將結構體struct _TS1 命名為TS1,

// struct _TS1 * 命名為 PTS1

// struct _TS1 *** 命名為 PPPTS1

 

typedef struct { // struct后面的結構體說明也可以去掉

    int x, y;

} TS2, *PTS2;

 

typedef PTS1 *PPTS1; // 定義PPTS1是指向PTS1的指針

 

typedef struct _TTS1{

    typedef struct ITTS1 {

       int x, y;

    } iner;

    iner i;

    int x, y;

} TTS1;

 

//結構體內部的結構體也一樣可以定義

typedef TTS1::ITTS1 ITS1;

 

void test_struct()

{

    // 基本結構體重定義的使用

    TS1 ts1 = {100, 200};

    PTS1 pts1 = &ts1; // 完全等價于TS1* pts1 = &ts1;

    PPTS1 ppts1 = &pts1; // 完全等價于TS1** ppts1 = &pts1;

    PPPTS1 pppts1 = &ppts1; // 完全等價于 TS1*** pppts1 = &ppts1;

 

    TS2 ts2 = {99, 88};

    PTS2 pts2 = &ts2;   // 完全等價于 TS2* pts2 = &ts2;

 

    TTS1 itts1 = {{110, 220}, 10, 20};

    Its1* rits1 = &itts1.i;

    ITS1* &its1 = rits1; // 等價于 TTS1::ITTS1 *its1 = &(itts1.i);

 

    printf("ts1\t = (%d, %d)\n*pts1\t = (%d, %d)\n"

          "**ppts1\t = (%d, %d)\n***pppts1= (%d, %d)\n\n",

           ts1.x, ts1.y, pts1->x, pts1->y,

           (**ppts1).x, (**ppts1).y, (***pppts1).x, (***pppts1).y);

    printf("ts2\t = (%d, %d)\n*pts2\t = (%d, %d)\n\n",

       ts2.x, ts2.y, pts2->x, pts2->y);

    printf("itts1\t = [(%d, %d), %d, %d]\n*its1\t =  (%d, %d)\n\n",

       itts1.i.x, itts1.i.y, itts1.x, itts1.y, its1->x, its1->y);

 

    S(pts1->x = 119);

    S(pts2->y = 911);

    S(its1->x = 999);

 

    printf("ts1\t = (%d, %d)\n*pts1\t = (%d, %d)\n"

          "**ppts1\t = (%d, %d)\n***pppts1= (%d, %d)\n\n",

           ts1.x, ts1.y, pts1->x, pts1->y,

           (**ppts1).x, (**ppts1).y, (***pppts1).x, (***pppts1).y);

    printf("ts2\t = (%d, %d)\n*pts2\t = (%d, %d)\n\n",

       ts2.x, ts2.y, pts2->x, pts2->y);

    printf("itts1\t = [(%d, %d), %d, %d]\n*its1\t =  (%d, %d)\n\n",

       itts1.i.x, itts1.i.y, itts1.x, itts1.y, its1->x, its1->y);

 

    S((*ppts1)->y = -9999);

    printf("ts1\t = (%d, %d)\n**ppts1\t = (%d, %d)\n\n",

       ts1.x, ts1.y, (*ppts1)->x, (*ppts1)->y);

 

    S((**pppts1)->x = -12345);

    S((***pppts1).y = -67890);

    printf("ts1\t = (%d, %d)\n*pts1\t = (%d, %d)\n"

          "**ppts1\t = (%d, %d)\n***pppts1= (%d, %d)\n\n",

           ts1.x, ts1.y, pts1->x, pts1->y,

           (**ppts1).x, (**ppts1).y, (***pppts1).x, (***pppts1).y);

}

 

typedef的使用中,最麻煩的是指向函數的指針,如果沒有下面的函數,你知道下面這個表達式的定義以及如何使用它嗎?

 

int (*s_calc_func(char op))(int, int);

 

如果不知道,請看下面的程序,里面有比較詳細的說明

 

 

 

// 定義四個函數

int add(int, int);

int sub(int, int);

int mul(int, int);

int div(int, int);

// 定義指向這類函數的指針

typedef int (*FP_CALC)(int, int);

 

// 我先不介紹,大家能看懂下一行的內容嗎?

int (*s_calc_func(char op))(int, int);

 

// 下一行的內容與上一行完全相同,

// 定義一個函數calc_func,它根據操作字符 op 返回指向相應的計算函數的指針

FP_CALC calc_func(char op);

 

// 根據 op 返回相應的計算結果值

int calc(int a, int b, char op);

 

int add(int a, int b)

{

    return a + b;

}

int sub(int a, int b)

{

    return a - b;

}

int mul(int a, int b)

{

    return a * b;

}

int div(int a, int b)

{

    return b? a/b : -1;

}

// 這個函數的用途與下一個函數作業和調用方式的完全相同,

// 參數為op,而不是最后的兩個整形

int (*s_calc_func(char op)) (int, int)

{

    return calc_func(op);

}

 

FP_CALC calc_func(char op)

{

    switch (op)

    {

    case '+': return add;

    case '-': return sub;

    case '*': return mul;

    case '/': return div;

    default:

       return NULL;

    }

    return NULL;

}

 

int calc(int a, int b, char op)

{

    FP_CALC fp = calc_func(op); // 下面是類似的直接定義指向函數指針變量

       // 下面這行是不用typedef,來實現指向函數的指針的例子,麻煩!

       int (*s_fp)(int, int) = s_calc_func(op);

       // ASSERT(fp == s_fp);  // 可以斷言這倆是相等的

    if (fp) return fp(a, b);

    else return -1;

}

 

void test_fun()

{

    int a = 100, b = 20;

    printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));

    printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));

    printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));

    printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));

}

 

運行結果

    calc(100, 20, +) = 120

    calc(100, 20, -) = 80

    calc(100, 20, *) = 2000

    calc(100, 20, /) = 5

 

posted on 2008-12-17 17:07 肥仔 閱讀(461) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区高清视频在线观看| 久久伊人精品天天| 久久国产精品网站| 亚洲伊人色欲综合网| 亚洲香蕉在线观看| 亚洲性视频网站| 亚洲一区观看| 亚洲欧美一区二区视频| 欧美亚洲午夜视频在线观看| 欧美一区二区三区的| 欧美在线黄色| 欧美成人乱码一区二区三区| 欧美大秀在线观看| 91久久精品一区| 亚洲日本无吗高清不卡| 在线亚洲一区观看| 欧美一级黄色网| 欧美不卡一卡二卡免费版| 欧美日韩精品三区| 国产午夜精品在线| 91久久精品美女高潮| 99精品国产福利在线观看免费| 日韩一二三区视频| 亚洲伊人第一页| 久久噜噜噜精品国产亚洲综合| 免费在线成人av| 亚洲毛片视频| 久久福利资源站| 欧美久久电影| 国产亚洲va综合人人澡精品| 亚洲黄网站在线观看| 午夜欧美理论片| 亚洲国产电影| 欧美一区在线视频| 欧美日韩一区视频| 在线欧美电影| 久久精品视频99| 9人人澡人人爽人人精品| 久久久精品网| 国产酒店精品激情| 在线亚洲精品| 亚洲第一黄网| 久久久噜噜噜久久中文字幕色伊伊| 欧美激情aⅴ一区二区三区| 国产网站欧美日韩免费精品在线观看 | 性欧美1819性猛交| 欧美日韩国产三区| 亚洲激情视频在线观看| 久久精品中文| 亚洲尤物影院| 国产精品v日韩精品| 亚洲国产另类精品专区| 久久综合图片| 欧美淫片网站| 国产一区深夜福利| 性欧美1819性猛交| 亚洲性图久久| 国产精品男gay被猛男狂揉视频| 99re66热这里只有精品3直播| 欧美ab在线视频| 久久久久久有精品国产| 很黄很黄激情成人| 久久综合色天天久久综合图片| 欧美一区二区女人| 国产三级精品三级| 久久婷婷激情| 久久精品麻豆| 亚洲第一黄色| 亚洲高清在线视频| 欧美喷潮久久久xxxxx| 一级成人国产| 亚洲在线视频| 黄色日韩网站| 欧美成人蜜桃| 欧美日韩美女| 国产欧美日本一区视频| 国产精品一区亚洲| 久久精品99久久香蕉国产色戒| 亚洲欧美另类国产| 国产一区二区你懂的| 久久久欧美一区二区| 久久免费视频网| 亚洲精品字幕| 亚洲一区999| 国产日韩一区二区三区在线| 久久天堂av综合合色| 麻豆精品视频在线观看视频| 亚洲人成网站在线观看播放| 99re亚洲国产精品| 国产日韩欧美一区二区三区在线观看| 久久久久在线| 欧美剧在线观看| 欧美在线二区| 欧美不卡视频一区发布| 亚洲欧美三级在线| 久久久久久综合网天天| 亚洲午夜国产成人av电影男同| 亚洲欧美日韩综合| 亚洲欧洲在线一区| 亚洲一区二区精品视频| 亚洲国产精品黑人久久久| 一区二区三区高清不卡| 伊人久久亚洲影院| 亚洲小说欧美另类社区| 尤物yw午夜国产精品视频明星| 亚洲精品一区在线观看香蕉| 国产亚洲欧美一区二区| 亚洲精品免费观看| 精品动漫3d一区二区三区| 一区二区三区四区五区视频| 亚洲福利视频在线| 性欧美大战久久久久久久久| 一区二区毛片| 牛夜精品久久久久久久99黑人| 亚洲在线中文字幕| 欧美成人第一页| 免费亚洲视频| 国产区在线观看成人精品| 亚洲另类在线一区| 亚洲欧洲精品一区二区| 欧美一区二区女人| 欧美一区二区三区四区在线观看地址| 欧美极品影院| 亚洲国内自拍| 在线观看日韩国产| 欧美一区二区成人6969| 亚洲一区图片| 欧美日韩岛国| 91久久久国产精品| 亚洲国产婷婷综合在线精品| 久久激情五月婷婷| 久久久久久999| 国产日韩欧美一二三区| 亚洲欧美日韩一区在线| 亚洲欧美日韩国产精品| 国产精品白丝av嫩草影院| 亚洲欧洲美洲综合色网| 亚洲精品美女在线观看| 蜜桃精品一区二区三区| 亚洲大片在线| 在线亚洲一区| 亚洲一区二区三区国产| 国产精品久久久久国产精品日日| 亚洲国产精品久久91精品| 亚洲国产mv| 免费成人性网站| 亚洲第一网站免费视频| 亚洲三级影院| 欧美人与性动交a欧美精品| 亚洲精品一区二区三区四区高清| 亚洲精品乱码视频| 欧美三级视频在线播放| 99riav国产精品| 久久国产手机看片| 国内精品视频久久| 麻豆freexxxx性91精品| 亚洲国产成人久久综合| 亚洲视频高清| 国产伦精品一区二区三区| 久久成人av少妇免费| 美玉足脚交一区二区三区图片| 亚洲国产日韩欧美| 欧美日韩一区二区在线播放| 亚洲欧美在线另类| 欧美xxx在线观看| 制服丝袜亚洲播放| 国产亚洲va综合人人澡精品| 久久婷婷综合激情| 夜夜精品视频一区二区| 久久人人看视频| 亚洲乱码视频| 国产婷婷色一区二区三区| 麻豆精品在线播放| 夜夜精品视频| 免费看亚洲片| 亚洲欧美日韩精品久久亚洲区| 国内精品一区二区| 欧美激情中文字幕一区二区 | 校园激情久久| 亚洲成人在线网| 国产精品久久久久久久久婷婷| 欧美一区影院| 日韩亚洲视频在线| 免费亚洲电影| 欧美在线亚洲综合一区| 日韩视频免费在线| 国产一区二区三区四区| 欧美日韩免费高清| 蜜桃久久精品乱码一区二区| 亚洲欧美变态国产另类| 亚洲精品视频在线播放| 久久野战av| 香蕉视频成人在线观看| 日韩手机在线导航| 在线电影一区| 国模精品一区二区三区| 欧美视频官网| 欧美极品影院| 欧美高清在线观看| 久久综合中文|