我正在尝试学习如何返回指向数组的指针,这样你就可以解决整个“你不能在 C/C++ 中返回数组”的问题。
我是 C++ 的初学者,但如果有帮助的话,我对 Java 了解很多。
我的代码是这样的:
// Source.cpp
#include <iostream>
// Returns a pointer to an array that contains the digits 0 to 9.
int* test()
{
// Create the array.
int r[10] = {0,1,2,3,4,5,6,7,8,9};
// Return the address to the array.
return r;
}
// Simple function that takes an "pointer" array or a "normal" array and prints the elements of them.
void print_arr(const int arr[], const int length)
{
for (int i = 0; i < length; i++)
std::cout << i << ": " << arr[i] << std::endl;
}
int main()
{
// Test the printing function with an "normal" array containing the digits 0 to 9.
print_arr(new int[10] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 10);
// Insert a line break to make the output look more clean.
std::cout << std::endl;
// Print the "pointer" array that should contain the same as the temporary variable.
print_arr(test(), 10);
}
我的输出是在 VS22 中默认的“调试”配置: (语言标准:ISO C++ 14,Windows SDK 版本:10.0,平台工具集:Visual Studio 2022 (v143))
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
0: 529054832
1: 32759
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
我的输出是在 VS22 中默认的“Release”配置: (语言标准:ISO C++ 14,Windows SDK 版本:10.0,平台工具集:Visual Studio 2022 (v143))
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
我在 visual studio 中神奇地更改调试配置值时遇到了类似的问题。总的来说,我不知道这两种配置之间有什么区别。 我期待一般的 Visual Studio Coding 环境的一些提示 :).
我试着在第 10 行给“指针”数组添加 2 (
return r + 2;
) 的地址偏移量,这很有效,但当然这只改变了地址而不是内存中数组的内容,所以第二个 print_arr 的输出是从 2 到 9 的数字:
0: 2
1: 3
2: 4
3: 5
4: 6
5: 5
6: 8
7: 9
8: -858993460
9: -858993460
正如我所说,它“神奇地”(对我而言)通过更改为“发布”配置来工作。