指向一个数组
Pointing to an Array
如何创建指向数组的指针?
std::string string_array[5 /*<-an arbitrary length determined by a function*/];
std::string** array_pointer = &string_array;
我将在Windows 7, 64位使用MinGW版本4.8.1编译这个,并得到这个错误:
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
的地址。然而,正如我从这个链接中理解的那样,这应该编译,因为数组本质上是一个指针,所以我应该创建一个指针指针,并将其指向我的另一个指针(我的数组)的地址,对吗?
您只需要一个*
,即
std::string* array_pointer = string_array;
数组衰变成指针,因此根本不需要&符号。它们与指针的关系有时会令人困惑,但在很多地方(比如这里),它们是可以互换的。
你也可以做一些实际上是指向数组的指针,但我不认为这是你在这种情况下想要的。语法应该是
std::string (*array_pointer)[5] = &string_array;
这里你需要知道长度。实际生成的机器语言代码将是相同的,但编译器将为您执行一些更严格的类型检查。也就是说,如果你用上面的4替换5,你会得到一个编译错误。