指针
指针是一个变量,其存放的是内存单元的那块地址。
一级指针
#include<stdio.h>
int main()
{
int a = 1;
int *p = &a;
printf("&a = %p\n", &a);
printf("p = %p\n", p); //p存放的就是a的地址
return 0;
}
二级指针
二级指针和一级指针一样,其存放的也是地址,但是它存放的是一级指针的地址。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 10;
int *p = &a;
int **pp = &p;
printf("&a = %p\n", &a);
printf("p = %p\n", p);
printf("pp = %p\n", pp);
system("pause");
return 0;
}
数组指针
定义 int(*p)[n];
p是一个指针,而()的优先级比 * 高,因此它指向的是一个长度为n的一维数组。
将一个二维数组赋值给数组指针的方法:
int a[6][8];
int (*p)[8]; //定义一数组指针,其指向一个含8个数据的一维数组
p = a; //将二维数组的首地址给指针p
p++; //此执行相当于将p从a[0][0]指向了a[1][0]
指针数组
定义 int * p[n];
p是一个指针,[ ]的优先级比 * 高,由int*可以看出其是一个整型指针数组,而且包含有n个指针类型的数组元素。此处使用上面的p = a和p++会报错。
将一个二维数组赋值给指针数组的方法:
int a[6][8];
int *p[6]; //表示其内存放着6个指针变量,分别为p[0],p[1],…,p[5]
for(int i = 0; i < 6; i++);
p[i] = a[i];
区别:可以看得出,数组指针只是一个指向数组的指针,而指针数组则是一个数组中包含着一个或者多个指针。