我有以下代码:
#include <iostream>
using namespace std;
void memoryAddr();
int *returnArray();
int main()
{
memoryAddr();
int *array = returnArray();
for (size_t i = 0; i < 10; ++i)
{
cout << array[i] << endl;
}
return -1;
}
void memoryAddr()
{
int array[10];
for (size_t i = 0; i < 10; ++i)
{
array[i] = i;
}
int *aPtr = array;
cout << "&array: " << &array << endl; // 0xffffcbc0
cout << "&array[0]: " << &array[0] << endl; // 0xffffcbc0
cout << "&aPtr: " << &aPtr << endl; // 0xffffcc00
}
int *returnArray()
{
int array2[10];
int *ptr2;
for (size_t i = 0; i < 10; ++i)
{
array2[i] = i;
}
ptr2 = array2;
return ptr2;
}
问题1: 当我运行memoryAddr()时,我得到以下内存地址:
&array: 0xffffcb90
&array[0]: 0xffffcb90
&aPtr: 0xffffcbc0
为什么&amp; aPtr与其他两个不同?是不是应该引用数组的内存地址?
问题2: 当一个函数返回一些东西时,是否需要在它返回之前释放任何指针,或者当它返回时自动释放它们?如果它们确实需要被释放,那么包括应用程序何时终止?
问题3 当我运行“returnAddr()”并且我遍历函数返回的*数组时,它输出未定义的值。但是,如果我指定它来访问数组中的某个元素,例如* array [5],它将返回我期望它返回的内容。为什么如果我指定索引但是如果我使用for循环则返回奇怪的值呢?