【问题标题】:MinGW GCC 4.7.0 gives me warning passing double [][] to const double(*)[] [duplicate]MinGW GCC 4.7.0 警告我将 double [][] 传递给 const double(*)[] [重复]
【发布时间】:2013-02-15 14:16:28
【问题描述】:

我在主函数中有两个类型的双二维数组。我有将array1复制到array2的函数。我将两个数组都传递给该函数。第一个数组不需要更改,所以我将形参 od first array 声明为 const 类型,但 MinGW GCC 给 ma 一个警告:

main.c:14:5: warning: passing argument 1 of 'Copy' from incompatible pointer type [enabled by default]
main.c:2:6: note: expected 'const double (*)[3]' but argument is of type 'double (*)[3]'

除该警告外,程序还可以工作,但是如果我只想从中读取,可以声明 const 类型的形式参数。我想保护被改变的实际论点。

#include <stdio.h>
void Copy( const double (*)[3], double (*)[3], int);

int main(void)
{
    double array[4][3] =
    { 
        {79.2, 12.6, 111.9}, 
        {56.4, 139.2, 111.5}, 
        {11.1, 99.7, 21.0}, 
        {91.0, 11.2, 45.5}
    };
    double arrCopy[4][3];
    Copy(array, arrCopy,  4);


    for(int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            printf("%.2f ", *(*(arrCopy + i) + j));
        }
        putchar('\n');
    }
    return 0;
}

void Copy( const double (*array)[3], double (*arrCopy)[3], int n )
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            *(*(arrCopy + i) + j) = *(*(array + i) + j);
        }
    }
}

【问题讨论】:

    标签: c windows gcc mingw


    【解决方案1】:

    中删除 const
    void Copy( const double (*array)[3], double (*arrCopy)[3], int n )
    

    【讨论】:

    • 是的,我不能删除 const,但我听说如果我只想读取表单数组(为了保护数组内容),将正式的参数声明为 const 会很好
    • 然后将双数组[4][3]声明为const。
    • 是的,但我不想将数组设置为 const,只是想将正式的参数设置为 const,所以我不能意外更改主函数中数组的内容。只想保护他
    • 在将其传递给函数时将其转换为 const。 (const double (*)[3])
    • @Armin 您永远不需要将非常量转换为 const
    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    相关资源
    最近更新 更多