【问题标题】:How can I pass a multidimensional array as a pointer in c [duplicate]如何在c中将多维数组作为指针传递[重复]
【发布时间】:2012-06-10 14:50:58
【问题描述】:

可能重复:
How to pass a multidimensional array to a function in C and C++

所以我有 char buffer[4][50]

我需要将它传递给一个方法 void SetBuffer(char **buffer) 或者至少我认为它应该是这样格式化的。

所以我做SetBuffer(buffer);?在方法中我需要设置每个元素所以

void SetBuffer(char **buffer)
{
strncpy(buffer[0], "something", 50);
strncpy(buffer[1], "something else", 50);
}

如何才能正确完成?

【问题讨论】:

  • 这在我看来更像是 C 而不是 C++

标签: c++ c pointers multidimensional-array pointer-to-array


【解决方案1】:

C++ 方法是酌情使用适当的容器(例如std::vector<unsigned char>std::string)。

OTOH,如果有特殊原因需要依赖数组,使用指针(就像你已经做的那样)并明确传递维度是一种方法。

【讨论】:

  • +1 表示“使用合适的容器”。我会做出类似的回答。
  • 最好的方法,我同意,因为我做了一些研究,发现在这种情况下使用多维数组是一种危险的设计
【解决方案2】:

有很多方法:

最简单的是:

void SetBuffer(char[][50] buffer)
{
strncpy(buffer[0], "something", 50);
strncpy(buffer[1], "something else", 50);

}

【讨论】:

    【解决方案3】:

    警告:这是一个 C 答案。您的答案对我来说似乎是正确的,但更好的方法是:

    #define BUFFER_DIM_1   4
    #define BUFFER_DIM_2   50
    
    int    i;
    char **buffer;
    
    /* Create an array of pointers to the lower level */
    buffer = malloc(BUFFER_DIM_1 * sizeof(char *));
    for (i=0; i<BUFFER_DIM_1; i++) {
        buffer[i] = malloc(BUFFER_DIM_2 * sizeof(char));
    }
    

    然后你可以按照你的建议使用。

    对于勇敢的人,你可以只使用两个 malloc 和一些更聪明的指针工作:

    #define BUFFER_DIM_1   4
    #define BUFFER_DIM_2   50
    
    int    i;
    char **buffer;
    
    /* Create an array of pointers to the lower level */
    buffer    = malloc(BUFFER_DIM_1 * sizeof(char *));
    buffer[0] = malloc(BUFFER_DUM_1 * BUFFER_DIM_2 * sizeof(char));
    for (i=1; i<BUFFER_DIM_1; i++) {
        buffer[i] = buffer[i-1] + BUFFER_DIM_2 * sizeof(char);
    }
    

    最后,不要忘记在不再需要时释放所有这些内存。

    【讨论】:

    • 这在 C 中很好,但在 C++ 中使用直接回答
    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 2020-02-28
    • 2016-09-02
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多