且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

int *与int*

更新时间:2022-10-04 11:01:41

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

1
int a, *b, **c;

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

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

摘自:如何设计一门语言(一)——什么是坑(a)


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

1
int *a;

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

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

1
int* a;

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

1
int* b, c, d;

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

1
int *b, *c, *d;

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


*** walker ***

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

RQSLT