指针又叫地址。
类型名 *指针变量 int *a;(指针变量前面的*表示该变量的类型是指针型变量,指针变量名是a,而不是*a)
指针变量:就是一个其值为另一个内存地址的变量(指针是修饰语);
条件语句表达式*a产生的结果类型是int,知道了*操作符执行的是间接访问操作以后,我们可以推断a肯定是一个指向int的指针。
int *a;
警告:
C在本质上是一种自由形式的语言,这很容易诱使你把星号写在靠近类型的一侧,如下所示
int* a;
这个声明与前面一个声明有相同的意思,而且看上去更为清楚,a被声明为类型是int*的指针。但是这并不是一个好技巧,原因如下:
int* b, c, d;
人们很自然的以为这条语句把所有三个变量声明为指向整型的指针,但事实并非如此。我们被它的形式愚弄了,星号实际上是表达式*b的一部分,只对这个标识符有用。b是一个指针,但其余两个变量只是普通的整型。要声明三个指针,正确的语句如下:
int *b, *c, *d;
在声明指针变量时,你也可以为它指定初始值。这里有一个例子,它声明了一个指针,并用一个字符串常量对其进行初始化;
char *message="Hello world";
这条语句把message声明为一个指向字符的指针,并用字符串常量中第一个字符的地址对该指针进行初始化。
警告:
这种类型的声明所面临的一个危险是你容易误解它的意思。在前面一个声明中,看上去初始值似乎是赋给表达式*message,事实上它是赋给message本身的。换句话说,前面一个声明相当于:
char *message; message="Hello world";