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

woaidongmao

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

typedef使用大全

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

 

#include <stdio.h>

#include <iostream.h>

 

 

/* 避免Visual Cfor與標(biāo)準(zhǔn)for的不同 */

#define for  if (0);   else for

 

/* dim(a)是用于計(jì)算a的維數(shù),不過只能計(jì)算數(shù)組的維數(shù),不能計(jì)算指針的維數(shù) */

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

 

/* N1N4是幾個(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型,不過ARR1又是一個(gè)數(shù)組,所以

 * ARR2 實(shí)際上是一個(gè)矩陣

 */

typedef ARR1 ARR2[N3]; /* 此處完全等價(jià)為typedef int ARR2[N3][N4];*/

 

/* 按照ARR2的解釋,ARR3也是一個(gè)一維數(shù)組,不過數(shù)組元素的類型是ARR2的類型

 * 所有ARR3是一個(gè)三維數(shù)組

 */

typedef ARR2 ARR3[N2]; /* 此處完全等價(jià)為typedef int ARR3[N2][N3][N4];*/

 

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

}

續(xù) 數(shù)組

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

 

typedef struct _TS1{

    int x, y;

} TS1, *PTS1, ***PPPTS1;  // TS1是結(jié)構(gòu)體的名稱,PTS1是結(jié)構(gòu)體指針的名稱

// 也就是將結(jié)構(gòu)體struct _TS1 命名為TS1,

// struct _TS1 * 命名為 PTS1

// struct _TS1 *** 命名為 PPPTS1

 

typedef struct { // struct后面的結(jié)構(gòu)體說明也可以去掉

    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;

 

//結(jié)構(gòu)體內(nèi)部的結(jié)構(gòu)體也一樣可以定義

typedef TTS1::ITTS1 ITS1;

 

void test_struct()

{

    // 基本結(jié)構(gòu)體重定義的使用

    TS1 ts1 = {100, 200};

    PTS1 pts1 = &ts1; // 完全等價(jià)于TS1* pts1 = &ts1;

    PPTS1 ppts1 = &pts1; // 完全等價(jià)于TS1** ppts1 = &pts1;

    PPPTS1 pppts1 = &ppts1; // 完全等價(jià)于 TS1*** pppts1 = &ppts1;

 

    TS2 ts2 = {99, 88};

    PTS2 pts2 = &ts2;   // 完全等價(jià)于 TS2* pts2 = &ts2;

 

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

    Its1* rits1 = &itts1.i;

    ITS1* &its1 = rits1; // 等價(jià)于 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的使用中,最麻煩的是指向函數(shù)的指針,如果沒有下面的函數(shù),你知道下面這個(gè)表達(dá)式的定義以及如何使用它嗎?

 

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

 

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

 

 

 

// 定義四個(gè)函數(shù)

int add(int, int);

int sub(int, int);

int mul(int, int);

int div(int, int);

// 定義指向這類函數(shù)的指針

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

 

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

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

 

// 下一行的內(nèi)容與上一行完全相同,

// 定義一個(gè)函數(shù)calc_func,它根據(jù)操作字符 op 返回指向相應(yīng)的計(jì)算函數(shù)的指針

FP_CALC calc_func(char op);

 

// 根據(jù) op 返回相應(yīng)的計(jì)算結(jié)果值

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;

}

// 這個(gè)函數(shù)的用途與下一個(gè)函數(shù)作業(yè)和調(diào)用方式的完全相同,

// 參數(shù)為op,而不是最后的兩個(gè)整形

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); // 下面是類似的直接定義指向函數(shù)指針變量

       // 下面這行是不用typedef,來實(shí)現(xiàn)指向函數(shù)的指針的例子,麻煩!

       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, '/'));

}

 

運(yùn)行結(jié)果

    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++ 基礎(chǔ)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久国产视频网站| 久久精品视频导航| 亚洲视频福利| 亚洲高清视频中文字幕| 国产精品夜色7777狼人| 欧美日韩伊人| 在线一区二区三区四区| 亚洲免费观看高清完整版在线观看熊 | 国产精品美女xx| 欧美色精品在线视频| 欧美精品一区二区高清在线观看| 欧美jjzz| 国产精品永久免费| 伊人夜夜躁av伊人久久| 亚洲国产成人av| 亚洲欧美www| 久久综合国产精品台湾中文娱乐网| 欧美影视一区| 亚洲国产老妈| 亚洲一区二区三区四区五区午夜| 一区二区高清视频在线观看| 亚洲男人的天堂在线| 欧美成人精品1314www| 国产视频亚洲精品| 亚洲欧美激情一区二区| 欧美国产日韩视频| 午夜久久tv| 欧美日韩一区二区免费视频| 激情六月婷婷综合| 久久久精品一区| 亚洲欧美日本国产有色| 欧美人与性动交a欧美精品| 激情久久久久久久| 亚洲精品你懂的| 亚洲国产欧美日韩另类综合| 久久天堂成人| 麻豆精品在线视频| 亚洲大胆女人| 亚洲主播在线| 国内免费精品永久在线视频| 亚洲国产高清aⅴ视频| 亚洲天堂网在线观看| 久久久人成影片一区二区三区| 亚洲国产经典视频| 欧美一区二区三区成人| 欧美日韩免费观看一区 | 一本大道久久a久久精品综合| 亚洲在线观看视频网站| 欧美成人免费大片| 久久精品国产91精品亚洲| 欧美日韩国产一区精品一区| 在线电影国产精品| 久久综合福利| 久久精品中文字幕一区二区三区 | 在线看一区二区| 欧美在线观看www| 亚洲一卡久久| 欧美乱人伦中文字幕在线| 亚洲国产精品成人综合| 久久久久久成人| 久久精品国产一区二区三区免费看| 国产精品国产三级国产专区53 | 日韩视频免费在线观看| 蜜臀va亚洲va欧美va天堂| 亚洲性线免费观看视频成熟| 欧美激情一区二区三区在线| 亚洲精品乱码久久久久| 免费亚洲网站| 欧美va天堂| 一本色道久久综合亚洲91| 久久精品电影| 久久精品综合网| 国产一区二区精品久久91| 亚洲视屏在线播放| 91久久精品www人人做人人爽| 欧美在线视频一区二区| 亚洲欧美日韩一区二区| 欧美日韩在线免费| 一本色道久久综合亚洲精品高清| 99精品欧美一区| 国产精品私房写真福利视频| 午夜亚洲影视| 欧美一区二区精品久久911| 在线观看日韩专区| 亚洲激情中文1区| 99re6热在线精品视频播放速度| 欧美日韩国产成人在线91| a91a精品视频在线观看| 一区二区免费在线播放| 国产精品日韩二区| 另类av一区二区| 欧美日韩国产成人| 久久精品综合| 欧美日本成人| 久久精品免费看| 欧美福利电影在线观看| 亚洲欧美日本国产专区一区| 久久精品99| 亚洲视频免费在线| 久久精彩免费视频| 久久先锋影音| 亚洲一区网站| 母乳一区在线观看| 午夜激情综合网| 欧美电影美腿模特1979在线看| 亚洲视频网站在线观看| 久久国产精品一区二区| 在线综合亚洲欧美在线视频| 久久经典综合| 亚洲色图在线视频| 老司机免费视频一区二区| 亚洲自拍偷拍网址| 老色批av在线精品| 久久综合免费视频影院| 国产精品免费aⅴ片在线观看| 你懂的网址国产 欧美| 国产精品久久久一区二区三区 | 一区二区久久久久| 亚洲国产视频直播| 久久久久国产精品厨房| 亚洲女与黑人做爰| 欧美精品日韩www.p站| 久久久伊人欧美| 国产精品稀缺呦系列在线| 亚洲精品美女在线| 亚洲人成77777在线观看网| 久久久久九九九| 久久综合999| 在线欧美福利| 久久精品视频在线观看| 久久国产精品99国产精| 国产精品日韩| 午夜精品在线观看| 久久久av水蜜桃| 国产婷婷97碰碰久久人人蜜臀| 亚洲一区二区三区精品在线观看| 一区二区三区视频在线| 欧美激情国产日韩精品一区18| 亚洲国产mv| 亚洲剧情一区二区| 欧美另类69精品久久久久9999| 最新日韩精品| 亚洲网站视频福利| 国产精品久久久久高潮| 欧美一区二区大片| 免费试看一区| 亚洲美女在线观看| 国产精品igao视频网网址不卡日韩| 99国产精品久久久久老师| 亚洲视频一区二区免费在线观看| 一区二区三区视频在线观看| 亚洲影院高清在线| 国产一区二区日韩| 久久综合色一综合色88| 亚洲欧洲精品成人久久奇米网| 中文日韩电影网站| 国产精品午夜国产小视频| 欧美有码视频| 亚洲国产你懂的| 欧美乱在线观看| 亚洲天堂成人| 蜜桃久久精品一区二区| 亚洲麻豆国产自偷在线| 国产精品qvod| 久久精品免费播放| 亚洲欧洲精品成人久久奇米网| 宅男66日本亚洲欧美视频| 国产在线国偷精品产拍免费yy| 久久青草福利网站| 一本色道久久综合| 久热精品在线视频| 亚洲精品永久免费| 国产精品日日摸夜夜添夜夜av | 欧美三日本三级三级在线播放| 亚洲永久免费观看| 欧美99久久| 亚洲天堂av图片| 国产在线不卡| 国产精品www.| 美女主播精品视频一二三四| 亚洲精品资源| 美女精品在线| 久久激情综合网| 亚洲综合欧美日韩| 亚洲国产精品成人va在线观看| 国产伦精品一区二区三| 欧美日韩日日骚| 欧美大片国产精品| 久久大综合网| 亚洲一区尤物| 日韩视频免费观看| 欧美激情一区二区在线 | 亚洲色图制服丝袜| 亚洲福利在线观看| 国产欧美精品一区aⅴ影院| 欧美电影免费观看高清| 久久国产视频网站| 亚洲女人天堂成人av在线| 亚洲精品小视频| 欧美激情欧美激情在线五月|