1.声明指针 int *a; int* a; 这两种声明的意思是一样的。 但是 int* b,c,d; 人们很自然的认为三个变量声明为指向整型的指针,但事实并非如此。其实b是个指针,其余两个是整型变量。 要声明三个指针,正确的语句是:int *b,*c,*d; char *message="Hello world!"; 看上去是赋给了表达式*message,事实上它是赋给了message本身。相当于: char *message; message="Hello world!";
2.隐式声明 函数如果不显式地声明返回值的类型,它就默认返回整型。当用旧风格声明函数的形式参数时,如果省略了参数的类型,编译器会默认它们为整型。最后,如果编译器可以得到充足的信息,推断出一条语句实际上是一个声明时,如果它缺少类型名,编译器会假定它为整型。但是,这不是一个好方法。
3.typedef声明与基本的声明相同,只是typedef关键字出现在声明的前面。 typedef char *ptr_to_char; 这样这个声明把标识符ptr_to_char作为指向字符的指针类型的新名字。就可以像使用任何预定义名字一样在下面的声明中使用这个新名字。 ptr_to_char a; 声明a是一个指向字符的指针。 提示:应该使用typedef而不是#define来创建新的类型名,因为后者无法正确地处理指针类型例如: #define d_ptr_to_char char * d_ptr_to_char a,b; 其实上面程序只正确声明了a,而b却被声明为一个字符。相当于:char * a,b;
4.常量的声明 int const a; const int a; 这两条语句都把a声明为一个整型常量,它的值不能被修改 int *pi; pi是一个普通的指向整型的指针。 int const *pci; 是一个指向整型常量的指针。可以修改指针的值,但不能修改它所指向的值。 int * const cpi; pci是一个指向整型的常量指针。此时指针是常量,无法修改,但是可以修改它所指向的整型值。 int const * const cpci; 无论是指针本身还是指向的值都是常量,不允许修改。