您的位置:首页 > 其它

数组指针及指针数组的区别

2016-04-13 17:17 309 查看
/* 指针数组:array of pointers,即用于存储指针的数组,
   也就是数组元素都是指针 例:int* a[4]     指针数组
   表示:数组a中的元素都为int型指针    
   元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*     

数组指针:a pointer to an array,即指向数组的指针 
<span style="white-space:pre">	</span>例:int (*a)[4]   数组指针    
       表示:指向数组a的指针
       元素表示:(*a)[i]  
*/
#include<stdlib.h>
#include<stdio.h>

int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int b[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

printf("%p,%p\n",a,&a);
printf("%d,%d\n",sizeof(*a),sizeof(*(&a)));/* 4 40 */
/*a 与 &a 的地址一样,但是 a 的步长是4 &a 的步长是40
所以 a 代表指向一个元素,&a 代表是指向一个数组 */
printf("%p,%p,%p\n",b,&b,*b);
printf("%d,%d,%d\n",sizeof(*b),sizeof(*(&b)),sizeof(**b)); /* 16 48 4*/
/* 从上面的结果可以看出 b 是行指针,步长是一行的大小,
&b 是数组指针 ,步长是整个数组,
*b 指向列,一列一个元素 */

int c[10];
int (*pc)[10];
//pc = c;	/* 错,类型不匹配 ,pc 是数组指针,c 是元素指针*/
pc = &c;	/* &c 是数组指针 */
int *px = c; /* 正确 px 是int类型的指针 与 c 类型一样所以正确 */

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: