#include<stdio.h>
int* p;
void fun()
{
int i=0;
int a[5]={0,1,2,3,4};
p=a;
}
int main()
{
fun();
printf("%d ,%x\n",p[2],&p[2]);
return 0;
}
这样单个单个的访问,虽然fu已经运行结束,但却能读出数组a中的书
要是我改成
#include<stdio.h>
int* p;
void fun()
{
int i=0;
int a[5]={0,1,2,3,4};
p=a;
for(;i<5;i++)
{
printf("%d ,%x\n",a[i],&a[i]);
}
}
int main()
{
int i=0;
fun();
printf("-----------------------------------\n");
for(;i<5;i++)
{
printf("%d ,%x\n",p[i],&p[i]);
}
printf("%d ,%x\n",p[1],&p[1]);
printf("-----------------------------------\n");
i=0;
for(;i<5;i++)
{
printf("%d ,%x\n",p[i],&p[i]);
}
printf("%d ,%x\n",p[1],&p[1]);
return 0;
}
这样循环读取,则不能显示数组a所在源地址的值
我知道,这是函数运行完要清栈,但第一种情况为何能读取呢?
求解答,是编译优化的原因吗?
int* p;
void fun()
{
int i=0;
int a[5]={0,1,2,3,4};
p=a;
}
int main()
{
fun();
printf("%d ,%x\n",p[2],&p[2]);
return 0;
}
这样单个单个的访问,虽然fu已经运行结束,但却能读出数组a中的书
要是我改成
#include<stdio.h>
int* p;
void fun()
{
int i=0;
int a[5]={0,1,2,3,4};
p=a;
for(;i<5;i++)
{
printf("%d ,%x\n",a[i],&a[i]);
}
}
int main()
{
int i=0;
fun();
printf("-----------------------------------\n");
for(;i<5;i++)
{
printf("%d ,%x\n",p[i],&p[i]);
}
printf("%d ,%x\n",p[1],&p[1]);
printf("-----------------------------------\n");
i=0;
for(;i<5;i++)
{
printf("%d ,%x\n",p[i],&p[i]);
}
printf("%d ,%x\n",p[1],&p[1]);
return 0;
}
这样循环读取,则不能显示数组a所在源地址的值
我知道,这是函数运行完要清栈,但第一种情况为何能读取呢?
求解答,是编译优化的原因吗?