C打印1-10,有点不对劲

时间:2012-12-10 02:03:28

标签: c arrays count increment

我有一个C程序,这很简单,但我在智能地使用指针方面相当糟糕。如果有人可以帮助我,我真的很感激。它主要有两个功能。第一个函数创建一个10个整数1-10的数组。第二个函数打印出该数组。谢谢,

#include<stdio.h>

//function to create array of 10 ints
int* myArray(void)
{
int array[10], i;

for(i = 0; i < 10; ++i)
{
    array[i] = i + 1;
}
return array;
}


//function to printout the array of 10 ints
void printArray(void)
{
int *array = myArray();
int i;
for(i = 0; i < 10; ++i)
{
printf("%d ", array[i]);
}
}

//my main
int main()
{
myArray();
printArray();

}

我目前得到的输出是1 1 2 3078316 5 6 3078824 257921824 1905931270 -2 很混乱了哈哈。

1 个答案:

答案 0 :(得分:5)

问题是你从函数myArray返回一个局部变量。声明int array[10]会将array放在堆栈上,并在myArray返回时被销毁。这意味着myArray正在返回无效指针。

如果需要在函数中创建数组,请使用malloc。那就是:

int *array = (int *)malloc(10 * sizeof(int));

请注意,在将来的某个时间点,您需要free()数组。例如,在printArray

int *array = myArray();
/* do some stuff with array */
free(array);