1. 形式如(*)p 的p表示指向什么的指针变量,例如:
int * p: p为指向执行数据的指针变量
int (*P)[n]: p为指向包含n个元素的一维数组的指针变量,即数组指针
int (*p)(): p为指向函数的指针变量,该函数返回一个整形
int **p: p为指向一个整形数据的指针变量
2. 另外:
int *p[n]: p为一个数组,一个指针数组,它由n个指向整型数据的指针元素。【主要使用在传递多个指针变量】
int *p(): p为一个函数,该函数返回一个指针,该指针指向整形数据
3. ‘\0’ 的ASCII代码为 0。
4. C语言中可以使用字符数组存放一个字符串或使用字符指针指向一个字符串,从而访问一个字符串。
5. 数组可以在定义时整体赋值,但是不能在赋值语句中整体赋值,而字符指针可以将一个字符串的首地址传给指针从而指向另一个字符串,这一点,通过数组名也不能实现,因为数组名虽然是地址,但它是常量,它的值不能改变的。
6. 通过字符数组名或字符指针变量可以输出一个字符串,而对一个数值型数组则不能用数组名输出它的全部元素。
《C语言程序设计》
指针常量:本质是一个常量,这个常量的类型是指针。也就是说这个指针是一个常量,所以这个指针本身的值不能改变,但是其指向的地址的值可以改变。
常量指针:本质是一个指针,指向的是常量。即这个指针指向的地址的值不能修改,但是指针本身可以改变,可以指向不同的地址。
一个经典的笔试题
用变量a给出下面的定义:
a) 一个整型数
b)一个指向整型数的指针
c)一个指向指针的的指针,它指向的指针是指向一个整型数
d)一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to aninteger
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointersto integers
f) int (*a)[10]; // A pointer to an arrayof 10 integers
g) int (*a)(int); // A pointer to afunction a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10pointers to functions that take an integer argument and return an integer