指针运用过程中的常见问题

1:为什么不能把局部变量的地址作为函数返回值返回?

答:当函数调用结束后,被调用函数的内存空间就会被释放,内存空间的使用权又会回到系统手中。虽然局部变量的地址被传回了主函数,但是由于这个地址所在的内存空间的使用权已经不在程序手中,所以此时取到的地址是一个不合法的地址,因此,不能把局部变量的地址作为函数返回值返回。


2:被调用函数形参的地址和实参的地址一样吗?

答:

举例:int a=12; int  b=10;

judge(&a,&b);     //调用函数judge ,实参是变量a和b的地址,假设,a的地址是0x1234,b的地址是0x4567,那么形参m ,n的地址也会是0x123和0x456吗??

void judge(int* m,int* n)          //定义了函数judge

在这里,只是把a和b的地址当成值传递给了m,n,所以这里0x1234和0x4567只是m和n的值,而m,n的地址就由系统随机分配,具体是什么,我们也不知道。


3:假设char* a=“i am a girl'; 为什么拿到这个字符串的首地址就等于拿到了这个字符串??

答:因为在这里,内存空间是顺序排列的,当拿到第一个地址的时候,就可以顺序的往下找,对于字符串来说,只要找到结束符‘\0’的时候就等于拿到这个字符串。


4:假设int i=20; i的地址为0x1234;什么情况下i 和这个地址的联系会被斩断,下一个变量的地址还能被赋为0x1234吗?

答:当函数调用结束,活着程序执行完毕后,这个内存空间就会被释放,这时i和这个地址的联系就会被斩断,当声明了下一个变量时,系统又会为这个变量分配一个内存空间,但是不能确定这个变量是否一定能拿到0x1234这个地址,因为分配的内存空间是随机的,也就意味着这个空间的地址是不确定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值