指向多维数组的指针变量
把二维数组 a 分解为一维数组 a[0],a[1],a[2]之后,设 p 为指向二维数组的指针变量。
可定义为:
int (*p)[4]
它表示 p 是一个指针变量,它指向包含 4 个元素的一维数组。若指向第一个一维数组
a[0],其值等于 a,a[0],或&a[0][0]等。而 p+i 则指向一维数组 a[i]。从前面的分析可得
出(p+i)+j 是二维数组 i 行 j 列的元素的地址,而(*(p+i)+j)则是 i 行 j 列元素的值。
二维数组指针变量说明的一般形式为:
类型说明符 (*指针变量名)[长度]
其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示
二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。
#include<stdio.h>
int main(){
int a[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
int *p;
p = &a[0][0];
int i, j;
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
printf("%4d", *(p + 4 * i + j));
}
}
printf("\n");
int (*pp)[4];
pp = a;
for(i = 0; i < 4; i++){
for(j = 0; j < 4; j++){
printf("%4d", *(*(pp + i) + j));
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main(void)
{
// a[i] = *(a + i)
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int i, j;
printf("1:----\n");
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
printf("%4d", *(a[i] + j));
}
printf("\n");
}
printf("2:----\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
printf("%4d", *(*(a + i) + j));
}
printf("\n");
}
return 0;
}
网友评论