两个学习指针的例子
下面的結(jié)果是多少?
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;
}
?
輸出結(jié)果:a1=15?????b1=5152
由于a是全局變量,存放在全局變量的內(nèi)存區(qū),它一直是存在的;
而局部變量則是存在于函數(shù)的棧區(qū),當(dāng)函數(shù)example2()調(diào)用結(jié)束后便消失,是b指向了一個不確定的區(qū)域,不能返回指向棧內(nèi)存的指針。
2、下面的結(jié)果是多少?
void?swap2(int *pa,?int *pb)//傳遞的是指針的值,不是指針指向的值。更重要的是t可能是野指針,導(dǎo)致系統(tǒng)崩潰
{
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
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
- 上一篇: ssm的餐饮点餐系统源码
- 下一篇: idea git提交代码步骤