Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符指针数组传递给函数_C++_C_Pointers - Fatal编程技术网

C++ 将字符指针数组传递给函数

C++ 将字符指针数组传递给函数,c++,c,pointers,C++,C,Pointers,我已经编写了以下示例代码来演示我的问题 #include <iostream> #include <string.h> using namespace std; void f (char*** a) { *a = new (char*[2]); *a[0] = new char[10]; *a[1] = new char[10]; strcpy(*a[0], "abcd"); strcpy(*a[1],"efgh"); } i

我已经编写了以下示例代码来演示我的问题

#include <iostream>
#include <string.h>

using namespace std;

void f (char*** a)
{
    *a = new (char*[2]);
    *a[0] = new char[10];
    *a[1] = new char[10];
    strcpy(*a[0], "abcd");
    strcpy(*a[1],"efgh");
}

int main ()
{
    char** b = NULL;
    f(&b);
    cout<<b[0]<<"\n";
    cout<<b[1]<<"\n";
    return 1;
}
这真让我困惑。有人能解释一下我错在哪里吗

我知道我可以通过调用函数f(b)来传递像void f(char**&a)这样的参数,这样就行了。但我想知道如果我使用char***a,会发生什么。它也应该起作用。如果这是一个愚蠢的问题,很抱歉。
任何关于上述问题的教程或参考资料都将不胜感激。
提前谢谢

这是因为,其中数组索引运算符
[]
的优先级高于解引用运算符
*

因此,从编译器的角度来看,表达式
*a[0]
实际上与
*(a[0])
相同,这不是您想要的

必须显式添加括号才能更改优先级:

(*a)[0] = ...

[0]和[1]都是字符,其中都有一个值,取消引用该值显然会导致分段错误。您可能想做的是:

(*a)[...]

取消引用作为指针的“a”,这将为您提供一个数组。

#include#include使用名称空间std;void f(char***a){a=new(char*[2]);(*a)[0]=new char[10];(*a)[1]=new char[10];strcpy((*a)[0],“Saurab”);strcpy((*a)[1],“srivastav”);}int main(){char b*NULL;f(&b);可以自动地
*a[0]
工作,因为它是正确的!
*a[0]
(*a[0]
都是
-交换零没有什么区别。Cf.
*a[1]==a[1][0]
但是
(*a)[1]==a[0][1]
。我当然希望这只是一个或多或少的学术问题,并且您正在生产代码中使用
std::vector
等…)
(*a)[...]