有关指针指向二维数组的小插曲,求个小问?(需要详解)
觉得指针很有意思,所以想搞清楚。一个数组转置的问题:
#include<stdio.h>
void main()
{
void zhuanzhi(int (*p1)[3], int (*p2)[3], int n);
int a[3][3], b[3][3], i, j, *pa, *pb;
printf("please input the a:\n");
for (i = 0; i < 3; i ++)
{
for (j =0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
pa= a[0]; 这里如果用 p=a;p=b就不行, 他们不是都是二维数组a的首行地址吗,有什么区别呢??
pb= b[0];
zhuanzhi(pa, pb, 3);
printf("please output the b:\n");
for (pb = b[0]; pb < b[0] + 9; pb++)
{
if ((b[0] - pb) % 3 == 0)
{
printf("\n");
}
printf("%4d", *pb);
}
}
void zhuanzhi(int (*p1)[3], int (*p2)[3], int n) 如果这里和主函数中的(*p1)[3],(*p2)[3]都改成*p1,*p2程序就报错,为什么一定要定它的列数呢?
{
int i,j;
for (i = 0; i < n; i ++)
{
for (j = 0; j<n; j++)
{
*(*(p2+i)+j) = *(*(p1+j)+i);
}
}
}
在此小弟感谢你们的帮助!!!!!!!!