今天在思考一个问题,随手记一下:
int Test(int n)
{
int a=1,b=2;
int c = 0;
for(int i=1;i<n;i++)
{
c = a + b + i;
}
return c;
}
int a = 1,b = 1;
int c = a+b;
问a ,b,c对应的值在内存中存储是怎么样的?
答案是a,b,c三个运行时变量存储在栈区,但是由于a,b这两个变量的值1和2在编译期间就已经确定了所以a,b两个变量时运行时在栈上分配的 但是1,2这两个值是编译器就在常量区分配好了的 也就是说程序一运行(不管int a=1,b=2;运行不运行) 在常量区就存在了1和2 ,但是c是由a+b得到的所以c的值也是在计算a+b后得到一个临时变量(这个变量程序不可见也无法修改就像int a = Func()一样系统会先计算Func()然后使用一个临时看不见不可操作的变量来记录这个值 待赋值到a后释放这个不可见变量 int c=a+b也是一样的原理)
所以这个过程即使循环n次那么常量区只是有一份1,2栈区只是有一份int 来计算a+b时间复杂度是O(1)。