C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

时间:2024-01-20 21:04:45
类型  普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针
定义方式 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); *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),才为这个数组内的值。