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)[...]