我有一个函数,它将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
怎么做?
答案 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);