如何创建指向数组的指针?
std::string string_array[5 /*<-an arbitrary length determined by a function*/];
std::string** array_pointer = &string_array;
我将使用MinGW版本4.8.1在Windows 7,64位上编译它,并收到此错误:
main.cpp:116:28: error: cannot convert 'std::string (*)[(((sizetype)<anonymous>) + 1)] {aka std::basic_string<char> (*)[(((sizetype)<anonymous>) + 1)]}' to std::string** {aka std::basic_string<char>**}' in initialization
string** array_pointer = &string_array;
从我在文本墙中可以推断出,我似乎并不想将array_pointer
设置为等于string_array
的地址。然而正如我从this link理解的那样,这应该编译,因为数组本质上是一个指针,所以我应该创建一个指针指针并将其指向我的另一个指针(我的数组)的地址,对吗?
答案 0 :(得分:2)
你只需要一个*
,即
std::string* array_pointer = string_array;
数组衰减到指针,所以你根本不需要&符号。他们与指针的关系有时会令人困惑,但在很多地方(比如这里)他们只是可以互换。
你也可以做一些实际上是指向数组的指针,但我不认为这是你想要的。语法是
std::string (*array_pointer)[5] = &string_array;
在这里你需要知道长度。生成的实际机器语言代码将是相同的,但编译器将为您执行一些更严格的类型检查。即,如果将5替换为上面的4,则会出现编译错误。