数组指针与指针数组
一、数组指针是指向数组的一个指针,例如int (*p)[4];,表示的是p指向拥有4个元素的数组的指针,p是指向一维数组的首地址。
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];
(*p)[0]保存的元素1,p+1表示指针位置下移一行,*(p+2)+3表示的是第二行第三列元素的地址,即&a[2][3],*(*(p+2)+3)表示的是第二行第三列元素的值,即a[2][3]。
代码示例如下:
void arraypointer()//数组指针应用 { int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4]; int row,col; p=a; for(row = 0; row < 3; row++) { for(col = 0; col < 4; col++) { printf("a[%d,%d] = %-4d",row,col,*(*(p+row)+col)); } printf("\n"); } }
二、指针数组是一个数组,数组中的元素是指针类型的数据。定义如下:int *p[4],由于[]的优先级比*高,p与[]优先结合,形成平p[]的数组,然后与*结合,表明数组是指针类型,保存的是指针类型的变量。
代码示例如下:
void pointerarray()//指针数组应用 { char *book[4] = {"C PROGRAMMING LANGUAGE", "ASSEMBLY LANGUAGE","JAVA LANGUAGE", "NATURAL LANGUAGE"}; int n = 4; int row; char *ptr; for(row = 0; row < n; row++) { ptr=book[row]; printf("%s\n",ptr); } }