這是一個讀取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