我有以下声明代码:
struct coord {
int x;
int y;
}
void rotateFig(struct coord[10][10]);
我需要实施rotateFig
。
我试着从以下开始:
void rotateFig(struct coord[10][10] c)
{
//code
}
我无法编译它 - 可能我在函数定义中传递c的方式不正确。我应该如何使用给定的签名传输c。 谢谢
答案 0 :(得分:6)
使用此定义:
void rotateFig(struct coord c[10][10])
{
//code
}
数组是实际参数,因此尺寸必须在其名称之后,而不是之前。
答案 1 :(得分:3)
虽然其他答案足够了,但我更喜欢将其作为指针传递并使用它传递尺寸,这更具动态性,对于//code
部分也是如此:
void rotateFig(struct coord**, int, int);
void rotateFig(struct coord** c, int d1, int d2)
{
//code
}
答案 2 :(得分:2)
struct coord
是一种类型,c
是struct coord
类型的变量,可以容纳10 X 10
struct coord
个元素。
所以它应该如下
void rotateFig(struct coord c[10][10])
在C
中使用多维数组时需要注意的一点是,它无法从函数返回。有关详细信息,请阅读this。因此,不建议使用上述格式,因为C
默认情况下按值而不是地址传递参数。
正如@TAMER先生在答案中提到的,你应该使用以下
void rotateFig(struct coord** c, int d1, int d2)
OTOH,您可以使用以下旋转代码供您参考!它将2d阵列旋转到90度!
#include <stdio.h>
#define N 10
int matrix[N][N];
void display()
{
int i, j;
printf("\n");
for (i=0; i<N; i++) {
for (j=0; j<N; j++)
printf("%3d", matrix[i][j]);
printf("\n");
}
printf("\n");
return;
}
int main()
{
int i, j, val = 1;
int layer, first, last, offset, top;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
matrix[i][j] = val++;
display();
for (layer = 0; layer < N/2 ; layer++) {
first = layer;
last = N - layer - 1;
for (i=first; i< last ; i++) {
offset = i - first;
top = matrix[first][i];
matrix[first][i] = matrix[last-offset][first];
matrix[last-offset][first] = matrix[last][last-offset];
matrix[last][last-offset] = matrix[i][last];
matrix[i][last] = top;
}
}
display();
return 0;
}
希望这有帮助!