这里还要说一件事情,就是在第一个程序当中,无论是debug版本还是release版本。执行完那个if语句以后,系统都是不会真正的把l清除掉,l只是k的一个别名。上面的程序是这样写的,用了*j=&i这样一句负值语句,而别名在MSDN中的解释与引用是相同的,所以也可以这样理解,int i=10; int &j=i;与上面的相同。不要去想上面这些程序了,大家再看看下面这个。 void f1( int *& j) { int l=20; int *k=&l; j=k; k=0; } void any_function_use_local_variables() { int a,b,c; a=b=c=100; } int main() { int i=10; int *j=&i; f1(j); cout<<*j; any_function_use_local_variables(); cout<<*j; return 0; } |
请大家自己编译、执行,看看结果是什么,然后结合上面的两个例子,想想是为什么。下面再给大家一个小例子,可能会有助于理解内存的概念。 程序的过程是试图去增加i,使之超过最大的整数。有一种情况是这个值被“卷回来”变成一个负数,在我的机器上程序的打印结果是-2147483648,这个结果可能因为硬件的不同而不同。 int main() { int i=1; while(0<i) i++; cout<<i; return 0; } |
结束。  
2/2 首页 上一页 1 2 |