指针

一维数组

(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,不指向具体的对象

posted @ 2018-01-30 21:25  Limulus  阅读(180)  评论(0)    收藏  举报