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

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>
            亚洲日韩中文字幕在线播放| 久久永久免费| 免费观看在线综合| 久久精品色图| 美女网站久久| 亚洲国产欧美一区二区三区丁香婷| 亚洲欧美在线高清| 欧美国产欧美综合 | 国产精品激情偷乱一区二区∴| 欧美视频免费看| 国产精品一区二区久激情瑜伽| 国产欧美日韩一级| 亚洲成在人线av| 这里只有精品视频| 久久福利一区| 亚洲国产精品999| 一个色综合av| 久久福利精品| 欧美美女福利视频| 国产欧美日韩亚州综合| 亚洲黄色片网站| 亚洲欧美在线一区二区| 免费一区二区三区| 一本一本久久a久久精品综合妖精| 亚洲欧美在线视频观看| 欧美国产大片| 国产日韩欧美一区二区| 亚洲日本一区二区| 久久久久九九九| 亚洲视频电影图片偷拍一区| 蜜臀久久久99精品久久久久久| 国产欧美日韩三区| 亚洲少妇在线| 欧美激情久久久久| 欧美自拍偷拍午夜视频| 欧美四级剧情无删版影片| 在线观看日韩av| 久久精品123| 亚洲女同同性videoxma| 欧美日韩国产bt| 亚洲日本成人| 鲁大师影院一区二区三区| 正在播放亚洲一区| 欧美日韩国产小视频在线观看| 亚洲大胆美女视频| 久久久国产精彩视频美女艺术照福利| 日韩视频精品在线观看| 欧美a级片网站| 亚洲激情成人| 欧美激情精品久久久久久| 先锋亚洲精品| 国产色视频一区| 久久精品视频在线看| 亚洲欧美日本日韩| 国产精品免费观看视频| 香蕉久久精品日日躁夜夜躁| 亚洲午夜久久久| 国产精品一香蕉国产线看观看| 亚洲欧美日韩在线播放| 一区二区三区欧美亚洲| 欧美亚一区二区| 先锋影音久久| 欧美影视一区| 在线视频中文亚洲| 在线观看精品视频| 狠狠色噜噜狠狠色综合久| 浪潮色综合久久天堂| 亚洲一区二区精品在线观看| 蜜桃av一区二区| 亚洲精品网站在线播放gif| 欧美国产精品v| 欧美 亚欧 日韩视频在线| 亚洲欧洲综合| 99国产精品久久久久久久成人热| 欧美日韩人人澡狠狠躁视频| 一区二区av在线| 亚洲特级毛片| 国产在线播放一区二区三区| 老司机精品视频一区二区三区| 久久久久久97三级| 亚洲免费av观看| 中文在线不卡视频| 极品尤物一区二区三区| 亚洲激情一区二区| 国产精品毛片a∨一区二区三区|国| 欧美在线亚洲一区| 久久综合色一综合色88| 一本一本久久a久久精品综合妖精| 一本色道久久88亚洲综合88| 国产一区二区三区四区| 亚洲国产成人在线| 国产精品日韩一区| 欧美黑人一区二区三区| 欧美日韩日日夜夜| 久久久久综合网| 欧美国产日韩一区| 欧美一区二区三区免费观看视频| 久久久久久尹人网香蕉| 99精品视频免费全部在线| 小处雏高清一区二区三区| 日韩一级精品| 欧美一区91| 中国亚洲黄色| 毛片一区二区| 久久久久久综合网天天| 欧美色精品天天在线观看视频 | 久久成人精品电影| 欧美国产专区| 噜噜噜久久亚洲精品国产品小说| 欧美视频中文字幕| 亚洲国产精品一区二区第一页 | 99精品视频免费全部在线| 韩国自拍一区| 亚洲永久免费精品| 亚洲网站视频| 免费永久网站黄欧美| 欧美一区二区三区四区视频| 欧美激情综合网| 国产三区二区一区久久| 亚洲黄色在线| 激情综合自拍| 亚洲永久免费观看| 亚洲欧美国产毛片在线| 欧美精品日韩www.p站| 欧美大片在线观看| 在线日韩日本国产亚洲| 欧美在线免费观看亚洲| 亚洲欧洲av一区二区| 欧美视频一区二区三区四区 | 欧美一区亚洲二区| 亚洲在线不卡| 欧美天堂在线观看| 99精品国产热久久91蜜凸| 亚洲乱码国产乱码精品精天堂 | 欧美在线免费视屏| 国产伦精品免费视频| 一区二区三区精品国产| 亚洲午夜女主播在线直播| 欧美日韩久久久久久| 日韩视频久久| 亚洲欧美日韩在线| 国产欧美日韩亚洲精品| 午夜久久久久| 久热精品视频在线观看一区| 狠狠色丁香婷综合久久| 久热精品视频在线观看| 亚洲激情黄色| 亚洲综合首页| 国产在线日韩| 欧美成人免费观看| 日韩视频一区二区三区| 午夜精品久久久久| 国产一区激情| 欧美成人按摩| 夜夜嗨一区二区三区| 欧美一级午夜免费电影| 狠狠久久综合婷婷不卡| 六月天综合网| 一二美女精品欧洲| 久久亚洲国产精品日日av夜夜| 亚洲第一二三四五区| 欧美日韩成人一区二区| 亚洲欧美欧美一区二区三区| 麻豆精品网站| 亚洲在线一区| 亚洲国产精品黑人久久久| 欧美日韩亚洲一区在线观看| 午夜亚洲精品| 亚洲激情成人| 久久视频国产精品免费视频在线 | 亚洲精品乱码久久久久| 国产精品久久久久aaaa| 久久久国产视频91| 一区二区三区精品| 欧美成人小视频| 亚洲欧美一区二区三区极速播放 | 亚洲欧洲日产国产网站| 国产精品h在线观看| 久久久久欧美精品| 欧美一区日韩一区| 最新日韩欧美| 国产人成一区二区三区影院| 欧美成人视屏| 久久爱www久久做| 亚洲精品国产精品乱码不99| 久久精品电影| 亚洲午夜国产一区99re久久| 在线观看一区视频| 国产日韩欧美在线播放| 欧美四级在线| 欧美激情一区二区三级高清视频| 翔田千里一区二区| 在线亚洲电影| 日韩视频在线一区二区| 欧美激情精品久久久久久久变态 | 亚洲国产一区二区三区高清| 久久久精品国产一区二区三区| 亚洲视频在线播放| 亚洲美女中出| 亚洲美女在线观看|