为什么这段代码不起作用?我有一些旧代码,不想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; }
dasblinkenli.. 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);
现在str1
是一个char
指针数组,有两个项目.第一项是包含地址的指针a[0]
; 第二项是包含地址的指针a[1]
.指针数组可以传递给期望指向指针的test()
函数,因此您的函数可以正常工作.
演示.
此代码不起作用,因为指针指向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);
现在str1
是一个char
指针数组,有两个项目.第一项是包含地址的指针a[0]
; 第二项是包含地址的指针a[1]
.指针数组可以传递给期望指向指针的test()
函数,因此您的函数可以正常工作.
演示.