天天看点

int *与int*

 第一个例子是我们喜闻乐见的C语言的指针变量定义啦:

<code>int</code> <code>a, *b, **c;</code>

  相信很多人都被这种东西坑过,所以很多教科书都告诉我们,当定义一个变量的时候,类型最后的那些星号都要写在变量前面,避免让人误解。所以很多人都会想,为什么要设计成这样呢,这明显就是挖个坑让人往下跳嘛。但是在实际上,这是一个语法的一致性好的例子,至于为什么他是个坑,问题在别的地方。

  我们都知道,当一个变量b是一个指向int的指针的时候,*b的结果就是一个int。定义一个变量int a;也等于在说“定义a是一个int”。那我们来看上面那个变量声明:int *b;。这究竟是在说什么呢?其实真正的意思是“定义*b是一个int”。这种“定义和使用相一致”的方法其实正是我们要推崇的。C语言的函数定义参数用逗号分隔,调用的时候也用逗号分隔,这是好的。

  在C语言的声明中,先给出一个基本类型,紧随其后的是一个标识符列表,这些标识符组成表达式,用于产生基本类型的变量。例如:

<code>int</code> <code>*a;</code>

  这条语句表示表达式*a产生的结果类型是int。知道了*操作符执行的是间接访问操作以后,我们可以推断a肯定是一个指向int的指针。

  C在本质上是一种自由形式的语言,这很容易诱使你把星号写在靠近类型的一侧,如下所示:

<code>int</code><code>* a;</code>

  这个声明与前面一个声明具有相同的意思,而且看上去更为清楚,a被声明为类型int*的指针。但是,这并不是一个好的技巧,原因如下:

<code>int</code><code>* b, c, d;</code>

  人们很自然地认为这条语句把所有三个变量声明为指向整型的指针,但事实上并非如此。我们被它的形式愚弄了。星号实际上是表达式*b的一部分,只对这个标识符有用。b是一个指针,但其余两个变量只是普通的整型。要声明三个指针,正确的语句如下:

<code>int</code> <code>*b, *c, *d;</code>

摘自:《C和指针》(3.2.3 声明指针)

*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1673626如需转载请自行联系原作者

RQSLT

继续阅读