关于指针的三个问题

时间:2016-01-21 12:28:57

标签: c++ arrays pointers memory

我有以下代码:

#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循环则返回奇怪的值呢?

0 个答案:

没有答案