将1 D数组传递给采用2 D数组的函数

时间:2011-09-11 12:46:21

标签: c++ arrays

我有一个函数,它将2 D字符数组作为参数

class listview{

    int numColumn;

    void func(char** data)
    {
    }
};

func不占用维度,因为它被固定为其所属对象中的数据成员。它的工作是在列表视图中插入一个由多个列组成的行。

我想将单个1 D字符数组传递给函数,因为此列表视图只有1列

listview obj;
obj.func(String("Test").GetStr());        //GetStr() returns a char array 

怎么做?

4 个答案:

答案 0 :(得分:5)

这完全取决于功能及其功能。为什么需要char**?也许是因为它需要输出或输入/输出参数?或者它可能将参数视为2D字符映射(这不太可能,因为它不占用维度)。它如何解释其参数?它是否将指针传递给索引?所有这些问题都需要回答。

在最简单的输入/输出参数情况下,我建议这样做:

char* myArray = ...;
f(&myArray); //pass the address

如果它只是一个输出参数,那么我认为参数不需要初始化;

char* myArray; 
//possibly allocate memory, depends on what f does
f(&myArray);

答案 1 :(得分:2)

非常简单:

String s("Test");
char *cstr = s.GetStr(); 
func(&cstr);

顺便说一句,char*不是一维数组。它指向char的指针。同样,char**不是2D数组,它指向char的指针。


<强>注意

不要写这个 1

char *cstr = String("Test").GetStr(); 
func(&cstr);

String对象在表达式结尾处被销毁,因此当您调用cstr时,func()可能指向的对象不存在。这会让你进入未定义行为的世界

我假设String类已正确实现。

答案 2 :(得分:1)

您实际上是在传递pointer to pointer to char,而不是数组。

你最接近你想要做的是获得一个代表C风格字符串的pointer to char,并将指针传递给

String str("Test");
char* c_str = str.GetStr();
func(&c_str); 

不幸的是,从您提供的代码中可以看出func如何知道外部“数组”中有多少“元素”;因此,这可能是安全的,也可能不安全,您应该查看func的文档。

即使是通常如何使用该功能的示例也会有所帮助。

答案 3 :(得分:0)

char **data // It's a pointer to a pointer (regardless the number of Ds)

“func”想要的是指向指针(或数组)的指针。

这样:

String st("Hello");
char *temp = st.GetStr()); 
func(&temp);