返回指向数组的指针不会在c中给出预期的输出

时间:2017-02-26 19:32:31

标签: c arrays pointers

#include <stdio.h>

int* createReverseArray(int *array, int size)
{
    int i;
    int newArray[size];
    for(i=size-1; i>=0; i--)
    {
        newArray[i] = array[size-i-1];
    }

    return newArray;
}

int main(void) {

    int myArray[] = {1,2,3,5,1};
    int myArray2[] = {1,2,3,4,2,1};
    int i;

    int size = sizeof(myArray)/sizeof(int);
    printf("Size: %d\n", size);
    int* newArray = createReverseArray(myArray, size);

    for(i=0; i<size; i++)
    {
        printf("%d, ", newArray[i]);
    }

    return 0;
}

我在createReverseArray函数中打印了数组并获得了正确的输出,但是当我将指针返回到数组然后尝试打印结果时,我认为它打印指向每个数组点的指针?我不太确定。

返回:

尺寸:5

12341002,1,-10772231820,-1077231812,1074400845,

1 个答案:

答案 0 :(得分:2)

newarray是一个自动局部变量。一旦函数返回它将不再存在。返回指向自动局部变量的指针调用undefined behaviour,在这种情况下可以预期没有任何好处。

您可以动态分配内存,然后返回指针

int *newArray = malloc(sizeof(int)*size);