初学者必备:教你理解复杂的CC++声明

初学者必备:教你理解复杂的CC++声明,第1张

初学者必备:教你理解复杂的CC++声明,第2张

我遇到过类似int * (* (*fp1) (int)) char * * argv
这样让你困惑的事情;你声明这样的变量吗?本文将从易到难,一步步教你如何理解这个复杂的C/C++语句。我们将从我们每天遇到的更简单的声明开始,然后逐渐添加const修饰符和typedef,以及函数指针。最后介绍一个“左右规则”,可以让你准确理解任何C/C++声明。需要强调的是,复杂的C/C++声明不是好的编程风格;这里只是教你如何理解这些说法。

让我们从一个非常简单的例子开始,如下:


int n;

这应该理解为“将n声明为int”(n是int变量)。让我们来看看指针变量,如下所示:

int * p;

这应该理解为“将p声明为int *”(p是int *变量),或者p是指向int变量的指针。我想在这里展开一下讨论:我认为在声明指针(或引用)类型变量的时候,直接在变量前面写*(或&),而不是直接在基本类型后面写。这可以避免一些误解,例如:

int* p,q;

乍一看,P和Q似乎都是int*类型,但实际上只有P是指针,Q是最简单的int类型变量。让我们继续之前的话题,看一个指针指针的例子:

[10]

理论上,指针的数量没有限制。你可以定义一个浮点变量的指针的指针。让我们看看下面的陈述:

int roll num[30][4];
int(* p)[4]= roll num;
int * q[5];

这里,P被声明为指向4元素(int类型)数组的指针,而Q被声明为包含5个元素(int类型指针)的数组。此外,我们还可以在同一语句中混合使用utility *和&如下所示:

int * * p1
// p1是一个指向int的指针。
int * & p2;
// p2是指向int类型指针的引用。
int & * P3;
//错误:指向引用的指针是非法的。
int & & P4;
//错误:对引用的引用非法。

注意:p1是一个int指针的指针;P2是对int类型指针的引用;P3是一个被int类型引用的指针(非法!);P4是一个int类型的引用(非法!)。

常量修饰符

当你想防止一个变量被改变,你可以使用const关键字。当你给一个变量添加const修饰符的时候,你通常需要初始化它,因为你在未来的任何时候都不会有机会改变它。例如:

const int n = 5;
int const m = 10;

上面两个变量N和M其实是同一类型的——都是const int(整形常数)。因为C++标准规定const关键字在类型或变量名前是等价的。我个人更倾向于第一种声明方式,因为它突出了const修饰符的作用。当const和指针一起使用时,会令人困惑。例如,我们来看看P和Q的以下语句:

const int * p;
int const * q;

哪一个表示类型为const int的指针(const直接修改int)哪一个表示类型为int的指针(const直接修改指针)?实际上,p和q都被声明为const int类型的指针。int类型的常量指针应该这样声明:

int * const r = & n;
// n已被声明为int

在这里,p和q都是指向const int类型的指针,也就是说,你不能在后面的程序中改变*p的值。而r是一个常量指针,它被初始化为指向变量n(即r = & n;),r的值将不再允许更改(但*r的值可以更改)。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 初学者必备:教你理解复杂的CC++声明

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情