我需要使用的函数需要带有以下签名的返回存储的vector参数:
char ***vvar
我应该在那里传递什么? 之后如何访问元素?
答案 0 :(得分:1)
假设你想要一个创建字符串向量的函数。您可以定义它并像这样调用它:
#include "stdio.h"
#include "stdlib.h"
void make_vector(char*** vvar)
{
/* We're going to create a vector of strings. */
char** vector = malloc(sizeof(char*) * 3 );
vector[0] = "Hello";
vector[1] = "world!";
vector[2] = NULL;
/* Now we give the address of our vector to the caller. */
*vvar = vector;
}
int main(void)
{
char** vector_of_strings = NULL;
make_vector(&vector_of_strings);
printf("%s\n", vector_of_strings[0]);
return 0; /* Memory leak is an exercise for the reader. :-) */
}
(在这个示例中,让make_vector
返回数组会更简单,但在更复杂的示例中,传递vector_of_strings
的地址是合理的。)
答案 1 :(得分:0)
我将假设向量将包含字符串,因为这对您描述的签名最有意义。 由于您还没有提供任何代码,我将假设您需要调用的函数类似于:
/* This function creates a vector with room for 'length' strings and places it in 'vvar' */
void create_string_vector(int /* in */ length, char*** /* out */ vvar);
由于函数希望能够更改vvar
并在调用者中反映出该更改,因此必须传递某个变量的地址,因此调用应该看起来像
create_string_vector(my_length, &my_var);
它处理一个指针级别
这只留下了如何声明my_var
的问题。因为它将是未知大小的向量或数组,所以您需要将其声明为指针。字符串也是一种未知大小的字符数组,所以你也需要一个指针。这导致声明
char* *my_var;
元素访问很容易:您可以将my_var
视为数组:
my_var[0] = "Hello";
答案 2 :(得分:-1)
这不是它的外观矢量。
如果函数签名是像函数(...,char *** vvar,...)这样的东西,那么你的解决方案并不简单。
您需要知道每个维度需要多少缓冲区空间,然后按如下方式创建复杂数组:
int dim_1 = 5, dim_2 = 4, dim_3 = 10;
char ***buffer = malloc(sizeof(char**)*dim_1);
for (int i=0;i++;i<dim_1) {
char **buffer_2 = malloc(sizeof(char*)*dim_2);
for (int j=0;j++;j<dim_2) {
char *buffer_3 = malloc(dim_3);
buffer_2[j] = buffer_3;
}
buffer[i] = buffer_2;
}