Skip to content

Latest commit

 

History

History
40 lines (27 loc) · 1.67 KB

File metadata and controls

40 lines (27 loc) · 1.67 KB

指针声明

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

int *a;

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

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

int* a;

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

int* b, c, d;

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

int *b, *c, *d;

在声明指针变量时,也可以为其指定初始值。这里有一个例子,它声明了一个指针,并用一个字符串常量对其进行初始化:

char *message = "Hello World.";

这条语句把 message 声明为一个指向字符的指针,并用字符串常量中第一个字符的地址对该指针进行初始化。这条语句的声明容易产生一个误解,形式上看上去初始值似乎是赋给了表达式 *message ,事实上它是赋给 message 本身的。换句话说,这个声明相当于:

char *message;
message = "Hello World.";