【问题标题】:struct array function argument结构数组函数参数
【发布时间】:2012-02-04 19:57:11
【问题描述】:

我有以下声明代码:

struct coord {
int x;
int y;
}
void rotateFig(struct coord[10][10]);

我需要实现rotateFig。 我尝试从以下开始:

void rotateFig(struct coord[10][10] c)
{
   //code
}

我无法编译它 - 可能我在函数定义中传输 c 的方式不正确。我应该如何使用给定的签名传输 c。 谢谢

【问题讨论】:

标签: c arrays struct arguments


【解决方案1】:

使用这个定义:

void rotateFig(struct coord c[10][10])
{
   //code
}

数组是实际参数,所以维度必须在它的名字之后,而不是之前。

【讨论】:

    【解决方案2】:

    虽然其他答案已经足够了,但我更喜欢将它作为指针传递并传递维度,这更加动态,//code 部分也是如此:

    void rotateFig(struct coord**, int, int);
    
    void rotateFig(struct coord** c, int d1, int d2)
    {
       //code
    }
    

    【讨论】:

    • 但是你的原型和定义不匹配...:-/
    【解决方案3】:

    struct coord 是一个类型,c 是一个struct coord 类型的变量,它可以容纳10 X 10 struct coord 元素。

    所以应该是这样的

    void rotateFig(struct coord c[10][10])
    

    C 中使用多维数组时需要注意的一点是,它不能从函数返回。详情请阅读this。因此,默认情况下不建议将上述格式用作C,而是按值而不是按地址传递参数。

    正如@Mr.TAMER 在他的回答中提到的那样,您应该使用以下内容

    void rotateFig(struct coord** c, int d1, int d2)
    

    OTOH,您可以使用以下旋转代码供您参考!它将二维数组旋转 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;
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多