首页 > 技术文章 > C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

PengfeiSong 原文

类型  普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针
定义方式 int *p; int *p[5];

int (*p)[5];

int a[3][5];

struct{...int i;..}a, *p

int (*p)(int,int);

int add(int a,int b)

int **p1;

int *p2;

int *p3[5];

赋值方式 p=&a; —— p=a; p=&a p=add;

p1=&p2;

p1=&p3;

解引用 *p=10; ——

p[1][2]=5;

*(*(p+i)+j)=5;

p->i=10;

*p(10,20)

一般可以简写为p(10,20);

*p1=(int*)0xffff;

 

  • 指针数组与数组指针

指针数组 int *p[5]; p为数组,数组存储的为指针。

数组指针 int (*p)[5]; p为指针,指向一个一维数组。

  • 以指针方式访问数组

一维数组 int *p; int a[5];

    p=a;

    *(p+i)相当于a[i]

二维数组 int a[2][5];

对应指针 int (*p)[5];//p为指针,指向数组长度为5 的一维指针

    p=a;

    *(*(p+i)+j)相当于a[i][j];

分析:内层的p为数组指针,所以解引用后 *(p+i)是p指向的值,为一个一维数组的首地址。再次解引用*(*(p+i)+j),才为这个数组内的值。

 

推荐阅读