c语言 二维数组旋转90度 指针输入指针输出 使用指针偏移实现
时间: 2023-11-03 18:00:58 浏览: 201
下面是一个示例代码,使用指针偏移实现二维数组旋转90度:
```c
#include <stdio.h>
void rotate(int **matrix, int matrixSize, int *matrixColSize){
// 水平翻转
for(int i=0; i<matrixSize/2; i++){
for(int j=0; j<*matrixColSize; j++){
int tmp = *((int *)matrix + i * (*matrixColSize) + j);
*((int *)matrix + i * (*matrixColSize) + j) = *((int *)matrix + (matrixSize-1-i) * (*matrixColSize) + j);
*((int *)matrix + (matrixSize-1-i) * (*matrixColSize) + j) = tmp;
}
}
// 对角线翻转
for(int i=0; i<matrixSize; i++){
for(int j=i+1; j<*matrixColSize; j++){
int tmp = *((int *)matrix + i * (*matrixColSize) + j);
*((int *)matrix + i * (*matrixColSize) + j) = *((int *)matrix + j * (*matrixColSize) + i);
*((int *)matrix + j * (*matrixColSize) + i) = tmp;
}
}
}
int main(){
int matrix[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int *p[3];
for(int i=0; i<3; i++){
p[i] = matrix[i];
}
int matrixSize = 3;
int matrixColSize[] = {3, 3, 3};
rotate(p, matrixSize, matrixColSize);
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
注意,在函数中使用指针偏移时,需要将二维数组转换为一维数组来处理。在主函数中,将二维数组每一行的指针存储在一个指针数组中,然后将指针数组作为参数传递给函数。
阅读全文