数组指针和指针数组

来源:互联网 发布:全29雷诺进阶双40数据 编辑:程序博客网 时间:2024/06/06 01:52

数组指针

通俗的理解,就是指向数组的指针。其本质是一个指针。
1.如:
int *p;
int a[3][4];
p=a;

我们可以先声明一个指针,让他指向一个数组,则这个指针就是数组指针(该指针指向的地址可以改变)。另外,在这里,数组名本身也是一个数组指针,指向数组的首地址(而数组名指向的地址是常量,只能是数组的首地址)。
2.如:
int (*p)[4];
是指声明一个指向4个int元素的数组的一个针p.


指针数组

为了自己方便记忆,我是理解成为 存储指针的数组。其本质是一个数组。
一个数组,若其元素均为指针类型数据,称为指针数组。 也就是说,指针数组中每一个元素都相当于一个指针变量,数组中每一个元素都是一个地址。
如:

int *p[4];

这里涉及到 * 与[]的优先级问题,只要我们记住[]比 * 优先级更高,就比较容易区分了。
由于[]的优先级更高,则p先与[4]结合,形成一个p[4]的数组形式,在与*结合,即表明这个数组都是指针类型的,每个数组元素都是一个指针。


总结

在我看来,关于数组指针与指针数组的区别,关键就在于 * 与[]的优先级问题上,有时会有括号(),当我们在声明是,注意观察变量名是先与 * 结合还是[]结合的。如果先与 * 结合,则说明是先声明成一个指针,再让这个指针指向一个数组,即为数组指针。如果先与[]结合,就说明是先声明一个数组,再把这个数组内的元素都声明成指针类型的,即指针数组。


0 0