如何在c中将多维数组作为指针传递

时间:2012-06-06 14:53:41

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

  

可能重复:
  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);
}

如何才能正确完成?

3 个答案:

答案 0 :(得分:3)

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);

}

答案 2 :(得分:2)

警告:这是一个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));
}

然后您可以按照建议使用。

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

#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);
}

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