C/C++进阶[5]

来源:互联网 发布:三只松鼠 淘宝 京东 编辑:程序博客网 时间:2024/06/14 01:53

一个很有趣的应用

关键字:迭代问题、一维数组范围

比如有一个结构,它是这样定义的:

typedef struct MyStuc

{

int nID;

char *pszText;

} MyStuc;

那么MyStuc的一个实例可以是:

MyStuc  mt[] = {

{0, "Text 1"},

{1, "Text 2"},

{2, "Text 3"}

};

这样的话我们很容易就能进行转化,并且能够保证结果是等效的:

MyStuc mt[3];

mt[0].nID = 0;

mt[0].pszText = "Text 1";

...

mt[2].pszText = "Text 2";

前一个mt定义的同时进行初始化,由编译器决定维数大小;而后一个则先定义后初始化,并且指定了维数大小。显然,它们的空间大小一样。但在迭代中,怎么应用呢?看下面的例子:

int  nMax = sizeof(mt) / sizeof(mt[0]);

for (int i = 0; i < nMax ; ++i)

{

    //do something

    mt[i] ....

}

它的优点在于自动限制mt的下标范围。下标在int  nMax = sizeof(mt) / sizeof(mt[0]);求出。这样做的好处是:无需干预整个数组的迭代,界限由程序算出。

而第二个例子:

int  nMax = 3;

for (int i = 0; i < nMax; ++i)

{

     //do something

     mt[i]....

}

下标是一个常量,这是要程序员指定的,对于mt范围的改变需要外界的干预该迭代范围。该方式的好处是:可以灵活指定迭代的范围,可以是整个对象也可能是一部分。

原创粉丝点击