typedef 数组使用详解
typedef到處都是,但是能夠真正懂得typedef使用的不算太多。對(duì)于初學(xué)者而言,看別人的源碼時(shí)對(duì)到處充斥的typedef往往不知所錯(cuò),而參考書又很少,所以在此給出一個(gè)源碼,供大家參考。
懂得這些,基本上是 對(duì)typedef 合格了, 有時(shí)間,我會(huì)把c,c++中使用typedef的例子和標(biāo)準(zhǔn)中規(guī)定詳解解讀,敬請(qǐng)期待。
?
#include <stdio.h>
#include <iostream.h>
?
/* 避免Visual C的for與標(biāo)準(zhǔn)for的不同 */
#definefor? if (0);??elsefor
?
/* dim(a)是用于計(jì)算a的維數(shù),不過只能計(jì)算數(shù)組的維數(shù),不能計(jì)算指針的維數(shù) */
#define dim(a) (sizeof(a)/sizeof(a[0]))
?
/* N1到N4是幾個(gè)常量,以枚舉的形式定義 */
enum {N1 = 2, N2 = 3, N3 = 4, N4 = 5};
?
/* 這個(gè)C程序員都知道,就是將DataType定義為int型,便于擴(kuò)充 */
typedefint 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];*/
?
/* 分別用定義好的ARR1,ARR2,ARR3定義三個(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;
總結(jié)
以上是生活随笔為你收集整理的typedef 数组使用详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目经理常见的沟通坏习惯
- 下一篇: 横空出世,席卷互联网--评微软等公司数据