指向数组

时间:2014-06-29 01:50:34

标签: c++ arrays pointers

如何创建指向数组的指针?

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理解的那样,这应该编译,因为数组本质上是一个指针,所以我应该创建一个指针指针并将其指向我的另一个指针(我的数组)的地址,对吗?

1 个答案:

答案 0 :(得分:2)

你只需要一个*,即

 std::string* array_pointer = string_array;

数组衰减到指针,所以你根本不需要&符号。他们与指针的关系有时会令人困惑,但在很多地方(比如这里)他们只是可以互换。

你也可以做一些实际上是指向数组的指针,但我不认为这是你想要的。语法是

 std::string (*array_pointer)[5] = &string_array;

在这里你需要知道长度。生成的实际机器语言代码将是相同的,但编译器将为您执行一些更严格的类型检查。即,如果将5替换为上面的4,则会出现编译错误。