为什么我不能将 char** 指向 C 字符串数组?
int main(int argc, char *argv[]) {
char* c1[] = {"Hey","Hello"};
printf("%s",c1[1]);
} //works fine
vs
int main(int argc, char *argv[]) {
char** c1 = {"Hey","Hello"};
printf("%s",c1[1]);
} //error
我认为这里的混乱源于这样的信念{"Hey","Hello"}
是一个数组。它不是。它根本不是一个物体。它只是一种特殊的初始化语法,可用于初始化数组。你不能用它来初始化char**
因为一个char**
是一个指针,而不是一个数组。它不会自动创建可以转换为指针的数组对象。
也许你把它想象成[...]
Python 或 a 中的列表{ ... }
JavaScript 中的对象。它根本不像那些。这些表达式实际上创建了该类型的对象,并且可以在可以采用这些对象的表达式中的任何位置使用。我们在 C++ 中使用的语法是just初始化语法。
例如,你could做这个:
const char* array[] = {"Hey","Hello"};
const char** p = array;
但是,你不能做这样的傻事:
std::cout << {"Hey", "Hello"}[1];
这里我们实际上创建了将存储指针的数组对象。只有这样我们才能将该数组转换为const char**
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)