(指针的方法处理)写一个函数,将一个3×3的整型矩阵转置
值得注意的是:
对于二维数组例如: a[2][2]
a表示的整个数组的首地址,a[0]表示的是第一行的首地址,这两者者在数值上是一样的,但含义不同(或者说类型不同),数组名a是对于整个数组(类型为 int(*)[2] ),a[0]是对于第一行(类型为 int* )
二维数组数组指针的解引用(以二维数组a为例)
*(*(a + i) + j)
相当于a[ i ][ j ]
#include<stdio.h>
#include<stdlib.h>
#define N 5
void fun(int(* p)[N]) {
for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
*(*(p + i) + j) = *(*(p + j) + i) ^ *(*(p + i) + j);
*(*(p + j) + i) = *(*(p + j) + i) ^ *(*(p + i) + j);
*(*(p + i) + j) = *(*(p + j) + i) ^ *(*(p + i) + j);
}
}
}
int main() {
int arr[N][N];
int num = 0;
int (*p)[N] = arr;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
*(*(p + i) + j) = num++;
}
}
printf("原数组为:\n");
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
printf("%d\t", *(*(p + i) + j));
}
printf("\n");
}
fun(p);
printf("转换后数组为:\n");
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
printf("%d\t", *(*(p + i) + j));
}
printf("\n");
}
system("pause");
}