两个学习指针的例子
下面的結果是多少?
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
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
- 上一篇: ssm的餐饮点餐系统源码
- 下一篇: idea git提交代码步骤