1.定义方式
<存储类型> <数据类型> (*变量名)[数组元素的个数]
int a[9] = {1,2,3,4,5,6,7,8,9};
int (*p)[9] = &a;//int (*)[9]//p ==&a
(*p)[1];
int *q = a;
2.数组指针指向二维数组--行指针
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int *p = a;
通过数组指针来取二维数组的元素:
*((*(p+i))+j)
p[i][j] -- (*(p + i))[j]
*(p[i] + j)
(*(p + i))[j]
举例说明:定义一个5x5 二维数组(整型),里面存放随机数(小于100),将每一行的元素按照从大到小排列(用数组指针实现)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int a[5][5] ={0};
int (*p)[5] = a;
int temp;
srand(time(NULL));
for(int i = 0;i < 5;i++)
{
for(int j = 0;j < 5;j++)
a[i][j] = rand()%100;
}
printf("befor sort:\n");
for(int i = 0;i < 5;i++)
{
for(int j = 0;j < 5;j++)
printf("%5d ",a[i][j]);
printf("\n");
}
for(int i = 0;i < 5;i++)
{
for(int j = 0;j < 4;j++)
{
for(int n = 0;n < 4 - j;n++)
{
if((*(p+i))[n] < p[i][n+1])
{
temp = p[i][n];
p[i][n] = p[i][n+1];
p[i][n+1] = temp;
}
}
}
}
printf("after sort:\n");
for(int i = 0;i < 5;i++)
{
for(int j = 0;j < 5;j++)
printf("%5d ",a[i][j]);
printf("\n");
}
return 0;
}