先簡單說一下兩個的概念,
指針數(shù)組:是一個數(shù)組,數(shù)組中的每個元素都是指針,例如 char *p[3];
數(shù)組指針:是一個指針,指向數(shù)組,例如 int (*q)[3];
測試代碼:
#include <stdio.h>
int main()
{
int i=0;
char a=12,b=34,c=56;
??char?*p[3]={&a,&b,&c};?//指針數(shù)組
char y[]={1,2,3,4,5};
char (*q)[5]=&y; //數(shù)組指針
int z[]={6,7,8,9,10};
int (*r)[5]=&z; //數(shù)組指針
for(i=0;i<3;i++)
printf("p[%d]=%d, ",i,*p[i]);
printf("p=%p,p+1=%prn",p,p+1);
printf("sizeof(p)=%ldrn",sizeof(p));
printf("rnrn");
for(i=0;i<5;i++)
printf("y[%d]=%d, ",i,*(*q+i));
printf("q=%p,q+1=%prn",q,q+1);
printf("sizeof(q)=%ldrn",sizeof(q));
printf("rnrn");
for(i=0;i<5;i++)
printf("z[%d]=%d, ",i,*(*r+i));
printf("r=%p,r+1=%prn",r,r+1);
printf("sizeof(r)=%ldrn",sizeof(r));
printf("rnrn");
return 0;
}
在64位windows下運行結(jié)果如下:
p[0]=12, p[1]=34, p[2]=56, p=0x7ffc08409000,p+1=0x7ffc08409008
sizeof(p)=24
y[0]=1, y[1]=2, y[2]=3, y[3]=4, y[4]=5, q=0x7ffc08409023,q+1=0x7ffc08409028
sizeof(q)=8
z[0]=6, z[1]=7, z[2]=8, z[3]=9, z[4]=10, r=0x7ffc08408fe0,r+1=0x7ffc08408ff4
sizeof(r)=8
通過獲取各個指針的大小可以發(fā)現(xiàn),windows指針大小占用8個字節(jié),p是指針數(shù)組,且有三個元素,所以占用大小是3*8=24個字節(jié);q和r分別是char和int類型的數(shù)組的指針,所以都只占用8個字節(jié)。
所以,指針數(shù)組是某一類指針的合集,是一個數(shù)組;
數(shù)組指針僅僅是一個指針,指向數(shù)組。