请大家给我看一下这个小程序为什么不对

来源:百度知道 编辑:UC知道 时间:2024/05/07 08:26:05
int *temp()
{
int *digest, a[10] = {1,2,3,4,5,6,7,8,9,0};
digest = a ;
return digest ;
}

main()
{
int *string , i;
string = temp() ;
for (i=0; i<10; i++)
printf("%x ",*(string+i)) ;

}

为什么输出的不是1 2 3 4 5 6 7 8 9 0 ???

函数内的变量的生存期是这个函数
函数结束后,你的temp()里的所有局部临时变量都释放了
所以返回主函数中的地址还是那个地址,但那段地址里面却没有1234567890啦

想改的话static int a[10] = {1,2,3,4,5,6,7,8,9,0};
在前面+static表示静态局部变量,可以一直存在程序中;

main()
{
int *string , i;
string = temp() ;
for (i=0; i<10; i++)
printf("%x ",*(string+i)) ;
}
这段中的string是安地址调用temp()函数
可是在输出的出时候它是调用 的(string+1)的地址当然就不是调用的temp()函数,所以输出就不同了啊.没有报错吗?