传递char**作为参数

K P*_*K P 0 c++ multidimensional-array

为什么这段代码不起作用?我有一些旧代码,不想a在堆中分配.

void test(char **str) {
   cout << str[0] << endl;
   cout << str[1] << endl;
}

int main(int argc, char* argv[]) {
    char a[2][5];
    strcpy(a[0],"abc");
    strcpy(a[1],"def");

    char *str1 = (char *)a;
    test(&str1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

此代码不起作用,因为指针指向char相同的,为2由5阵列的char,具有或不具有铸:

  • 指向指针的指针可以用作指针数组,即其元素可以用*运算符解引用
  • 一个2乘5阵列由十个项目组成,每个项目分为两行,每行五个项目.这些项目都不是可以解除引用的指针.

以下是如何构建与char**以下内容兼容的数组:

char a[2][5];
strcpy(a[0],"abc");
strcpy(a[1],"def");

char *str1[] = { a[0], a[1] };
test(str1);
Run Code Online (Sandbox Code Playgroud)

现在str1是一个char指针数组,有两个项目.第一项是包含地址的指针a[0]; 第二项是包含地址的指针a[1].指针数组可以传递给期望指向指针的test()函数,因此您的函数可以正常工作.

演示.