将char指针数组传递给函数

索拉比斯

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

#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;
}

在这段代码中,我发现a = new(char [2]); 不分配* a [1]的内存。

在GDB中,我得到以下段错误。

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400926 in f (a=0x7fffffffdfe8) at array1.cpp:10
10          *a[1] = new char[10];
(gdb) p *a[1]
Cannot access memory at address 0x0

这真让我感到困惑。谁能解释我要去哪里错了。

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

一些程序员哥们

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

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

您必须显式添加括号以更改优先级:

(*a)[0] = ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将char数组的指针传递给函数

来自分类Dev

将char指针数组传递给函数

来自分类Dev

将char指针/数组传递给函数

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

将char指针传递给C函数

来自分类Dev

将char数组的数组传递给函数

来自分类Dev

将char数组的数组传递给函数

来自分类Dev

将指向数组的指针传递给函数

来自分类Dev

将“指针数组”传递给函数

来自分类Dev

将指针数组传递给函数

来自分类Dev

将指针或数组传递给函数

来自分类Dev

将指针数组传递给函数

来自分类Dev

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

来自分类Dev

将指针数组传递给函数

来自分类Dev

无法将char数组传递给函数

来自分类Dev

将char数组传递给函数C ++

来自分类Dev

将char数组传递给函数

来自分类Dev

将字符串传递给接受char指针的函数

来自分类Dev

将char指针作为参数传递给函数

来自分类Dev

将字符串地址作为参数传递给指针,指针传递给char函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将指针传递给函数

来自分类Dev

将char数组传递给函数内的struct数组

来自分类Dev

将数组传递给函数-指针与引用(C ++与C)

来自分类Dev

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

来自分类Dev

将整数传递给函数内的数组(无指针)