码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-12 16:55:38      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

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这个地址,因为分配的内存空间是随机的,也就意味着这个空间的地址是不确定的。

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

标签:

原文地址:http://blog.csdn.net/sheep_and_stone/article/details/51367042

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!