void rotate(int** matrix, int matrixRowSize, int *matrixColSizes)
{
int n = matrixRowSize;
for(int a = 0; a<n/2; ++a)
{
for(int b = a;b<n-a-1;++b)
{
int temp = matrix[a][b];
matrix[a][b] = matrix[n-1-b][a];
matrix[n-1-b][a] = matrix[n-1-a][n-1-b];
matrix[n-1-a][n-1-b] = matrix[b][n-1-a];
matrix[b][n-1-a] = temp;
}
}
return;
}
通过了,但是有两点疑问
1.matrixColSizes参数有什么用?
2.入参是int **,不是只能改变int*吗?
比如int参数,不能改变
int *参数,可以改变int
int **参数,应该只能改变int *,也就是matrix[i],而不能改变matrix[i][j]
有点疑惑,以后解答
-------------------------------------------------------------------------------------------------------------------------------------
20190211
关于问题2
之前对指针造成了误解,int **和int*本质上都是地址,区别在于运算时,例如++,int**地址+sizeof(int*),int*地址+sizeof(int)
int**matrix虽然是二维数组,本质上还是一个指向一行排排坐的数据。
只要指的好,想改什么就改什么。
新的问题:
入参是int** matrix
直接 matrix[a][b];操作竟然不报错!!!!完全不科学!
我自己写的测试程序做不到
从理论上来讲,传递了一个int**的matrix指针,
matrix是
{{0,1},
{2,3}}
在内存中matrix指向0所在的地址。
在不知道每行元素的个数时,是不能通过matrix[1][0]来获取数据
应该是(把matix当做一个指向排排坐数组首地址的int*指针,通过++来指向下一个元素)
matrix[i][j] = *((int *)matix+i*matrixRowSize+j)