指向一个数组

Pointing to an Array

本文关键字:一个 数组      更新时间:2023-10-16

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

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,你会得到一个编译错误。

相关文章: