关于指针数组与数组指针的总结

来源:互联网 发布:java 串口封装类 编辑:程序博客网 时间:2024/04/19 06:27

int *p[10];//指针数组

int(*p)[10];//数组指针

其实区别这连个,根本不用去理什么指针数组跟数组指针,理解它内在的含义更为重要!掌握分析它的方法更更重要。这里简单讲讲我理解的方法。

int *p[10]   是  *p[10] 为int 型, p[10] 为int * 型(也就是指向int型的指针),而再拆分p就是10个元素的数组首地址,那么合起来的意思呢,就是p[10]是含有10个元素的数组,其元素类型是int *型,也就是指向int型的指针。换句话说p里的元素都是指针。

int(*p)[10] 对这个的分析用上面那种拆分方法。(*p)[10] 是一个int型; 因为(*p)加了个括号,所以,*p放一起考虑,即p是一个指针。一个指针,后面跟着[10]是什么意思呢?我们看下,int a[10] 这个是平时定义数组是用的语句,a在这里是数组的首地址,地址也即指针,形式上跟int(*p)[10]其实是一样的,简单的说就是p指向了a的地址。

需要注意的是&a 与&a[0]之间的区别。&a表示 一个指向int   [10] 的地址(指针), 而&a[0]是指向int型的地址(指针),尽管他们在数值上相等,都是表示数组的地址,但是意义不一样。前者是数组首地址,后者是数组首(第一个)元素的地址。故这里&a 可以把值赋给p,而&a[0]不可以,具体体现的差异是&a[0]+1会等于&a[1],而&a+1跨越整个数组(10个元素),实际上可以认为它是个二维数组了。另外常说的数组名a与&a 是没区别的,a是隐性类型转换为&a。

0 0
原创粉丝点击