指针
一维数组
(1)int *p=&a[0];与int *p=a;等价,p的值是数组a的首元素(即a[0])的地址。
(2)*(p+1),*(p-1),*(++p),*(--p),不是简单地将p加减1,二十加减加减一个数组元素所占的字节数。*(p+i)或*(a+i)指向数组元素a[i]。
(3)如果指针p1和p2都指向同一数组中的元素,则p2-p1的结果是两个地址之差除以数组元素的长度,即计算p1与p2的相对距离。
(4)数组首元素地址为常量,不能自加。
二维数组
(1)int *p=a[0]; 则指针p指向a[0][0],p++指向a[0][1];
(2)如果指针p指向a[0](即int *p=&a[0];或int *p=a;)则p++指向a[1]而不是a[0][1],p的增量以一维数组的长度为单位。
字符串
可以对字符指针变量赋值,但不能对数组名赋值。
eg:char *a;a=“I love China”;合法
而char str[14];str=“I love China”;不合法
函数
通过指针变量调用它所指向的函数
#include<stidio.h>
int main(){
int max(int,int);
int (*p)(int,int);//定义p是一个指向函数的指针变量
p=max;
p();
}
int max(int x,int y){ }
这里使用指针p,引用max()函数
若是int *p(int,int);则是声明返回类型为指向整型变量的指针的函数。
指针数组
类型名 *数组名[数组长度];
eg:int *p[4]; p表示指向整形变量的指针的数组。
而 int (*p)[4];p表示指向整形数组的指针。
注意: 指针*p不能直接赋值*p=1;只能再int a=1;p=&a;
归纳比较
|
变量定义 |
类型表示 |
含义 |
|
int i; |
int |
定义整形变量i |
|
int *p |
int * |
定义p为指向整形数据的指针变量 |
|
int a[5] |
int [5] |
定义整型数组a,它有5个元素 |
|
int *p[4]; |
int (*)[4] |
定义指针数组p,它由4个指向整形数据的指针元素组成 |
|
int (*p)[4] |
int(*)[4] |
p为指向包含4个元素的一维数组的指针变量 |
|
int f(); |
int () |
f为返回整形函数值的函数 |
|
int *p() |
int *() |
p为返回一个指针的函数,该指针指向整形数据 |
|
int (*p)(); |
int (*)() |
p为指向函数的指针,该函数返回一个整形值 |
|
int **p; |
int ** |
p是一个指针变量,他指向一个指向整型数据的指针变量 |
|
void *p |
void * |
p是一个指针变量,基类型为void,不指向具体的对象 |

浙公网安备 33010602011771号