1、指向数组元素的指针变量
#include<stdio.h> int main() { int* p; int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }; int i, j; //将第0行第0列的地址赋给p for (p = a[0]; p < a[0] + 12; p++)//注意是a[0] { if ((p - a[0]) % 4 == 0) printf("\n"); printf("%-4d", *p); } printf("\n"); return 0; }
2、指向由m各元素组成的一维数组的指针变量
数据类型:(*p)[m]
功能:指定变量p是一个指针变量,它指向包含m个元素的一维数组
例如:int(*p)[4];
p=a;
p指向a数组,p++的值为a+1,只能对行进行操作,不能对行中的某个元素进行操作,只有执行*(a++)将行转列后,才能对数组元素进行操作
程序:输出二维数组任意一行任意一列元素的值
#include<stdio.h>
int main()
{
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
int(*p)[4];//p指向包含4个整型的一位数组
int i, j;
p = a;//将二维数组首地址赋给p
scanf_s("%d%d", &i, &j);
printf("a[%d][%d]=%d", i, j, *( * (p + i) + j));
return 0;
}
分析:指针变量p指向包含4个整形的一维数组,p+i表示第i行首地址,在二维数组中,*(p+i)表示第i行第0列的元素的地址,即p[i],此时将行指针转化为列指针,则*(p+i)+j 表示第i行第j列元素的地址,即p[i]+j,而*(*(p+i)+j)代表第i行第j列元素的值