这是一个读取10个整数并将它们存储在数组中的函数(returnArr)。每增加2,并返回数组的基地址。使用基址,打印数组元素(三())。通过调用getchar改变程序的行为
#include<stdio.h>
#include<stdlib.h>
int* returnArr()
{
int arr[10];
size_t iter = 0;
while(iter < 10)
{
scanf("%i",arr+iter);
arr[iter]+=2;
printf("%i ",arr[iter]);
iter+=1;
}
return arr;
}
void three()
{
size_t iter = 0;
int* arr = returnArr();
//putchar('\n');
while(iter < 10)
{
printf("%i ",arr[iter]);
iter+=1;
}
return;
}
int main()
{
//one();
//two();
three();
return 0;
}
理想情况下,程序应该由于地址点到另一个函数的局部变量这是阵列遍历之前调用的位置打印无用值。
但它实际上是在putchar函数调用被注释时打印数组元素,当程序代码中包含getchar函数调用时,垃圾值。
在Debian上使用gcc 4.7.2。
任何人都可以解释这一点吗?
-Newbie