我有一个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 很混乱了哈哈。
答案 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);