下面的结果是多少?
int a=5;
int *example1(int b)
{
a+=b;
return &a;
}
int *example2(int b)
{
int c=5;
b+=c;
return &b;
}
void main()
{
int *a1=example1(10);
int *b1=example2(10);
cout <<”a1=”<<*a1;
cout <<”b1=”<<*b1;
}
输出结果:a1=15 b1=5152
由于a是全局变量,存放在全局变量的内存区,它一直是存在的;
而局部变量则是存在于函数的栈区,当函数example2()调用结束后便消失,是b指向了一个不确定的区域,不能返回指向栈内存的指针。
2、下面的结果是多少?
void swap2(int *pa, int *pb)//传递的是指针的值,不是指针指向的值。更重要的是t可能是野指针,导致系统崩溃
{
int *t;
t = pa;
pa = pb;
pb = t;
}
void swap3(int *pa, int*pb)
{
int t;
t = *pa;
*pa = *pb;
*pb = t;
}
void main()
{
int x = 1, y = 3, *pa = &x, *pb = &y;
swap2(pa, pb);
SK_ERROR(("\n %d, %d. \n", x, y)); //1 3
swap3(pa, pb);
SK_ERROR(("\n %d, %d. \n", x, y)); //3 1
}