【问题标题】:How to declare char array as function parameter ?or tell me there is some other thing wrong in this code?如何将 char 数组声明为函数参数?或告诉我此代码中还有其他问题?
【发布时间】:2019-09-21 12:56:16
【问题描述】:

我应该怎么做才能解决这个问题?

我不知道任何其他方法,所以我没有尝试任何东西

bool isPresent(int p_rows,int p_cols,char p_search[p_cols'1']'2','3'char p_words[][p_cols])

单个逗号中的计数表示我在哪个点收到了哪个错误。 我还想提一提的是,我正在这个程序中进行递归,并且还有其他函数的参数也与此相同,但只有这个函数定义导致错误

1)use of parameter outside function body before ']' token
2)expected ')' before ',' token`enter code here`
3)[Error] expected unqualified-id before 'char'

【问题讨论】:

  • 使用 std::vector<char> 而不是哑数组。那么你就没有这个问题了。

标签: c++ arrays multidimensional-array


【解决方案1】:

可变长度数组不是标准的 C++ 功能。然而在这个声明中

bool isPresent(int p_rows,int p_cols,char p_search[p_cols], char p_words[][p_cols]);
                                                   ^^^^^^                  ^^^^^^

您正在尝试使用变量数组声明。

对于最后一个参数声明

char p_words[][p_cols]

变量p_cols 必须是编译时常量。

声明可以如下所示。我假设作为最后一个参数传递给函数的数组是在程序中声明的,例如具有固定常量维度的数组,变量p_rowsp_cols 指定了数组的子数组。

bool isPresent(int p_rows,int p_cols,char p_search[], char p_words[][N]);

其中N 是原始数组的第二个常量维度。

例如

const size_t M = 100;
const size_t N = 100;

bool isPresent(int p_rows,int p_cols,char p_search[], char p_words[][N]);

int main()
{
    char p_words[M][N];
    char p_search[N];

    // ...    

    int p_rows = 10; 
    int p_cols = N;

    isPresent( p_rows, p_cols, p_search, p_words );

    //...
}

否则,您应该使用 std::vector<std::vector<char>>std::vector<std::string>std::vector<char> 的数组或 std::string 的数组,而不是原来的数组定义。

【讨论】:

    【解决方案2】:

    将字符数组声明为参数与将其声明为变量相同。

    例如数组

    char ch_array[SIZE];
    

    可以像这样声明为foo 的参数

    void foo(char ch_array_arg[SIZE])
    

    它也可以声明为指向字符序列的指针

    void foo(char *ch_array_arg);
    

    当然,在该示例中,您还必须指定数组的大小。

    【讨论】:

    • 函数声明中没有使用数组。和void foo(char *ch_array_arg);没什么区别,所以这两个函数是一回事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多