文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>值得思考_返回局部变量的地址

值得思考_返回局部变量的地址

时间:2009-05-07  来源:hubo214

char   *   GetStr()  
  {  
    char   *tmp;  
   
    tmp   =   "123"  
   
    return   tmp;  
  }  
   
  void   main()  
  {  
    printf("%s",   GetStr());  
  }  
   
   
  会输出123吗?123创建在堆上还是栈上呢?123的空间是什么时候释放的?

会输出123。  
  tmp是GetStr()中的局部变量,是在栈中分配空间。  
  而“123”是一个字符串常量,是一个只读数据区的一个地址。  
  tmp   =   “123”;  
  把tmp的值附为“123”的地址  
  return   tmp;    
  将tmp的值返回,也就是“123”的地址,而这段地址不会在GetStr()返回的时候释放。  
  所以在printf("%s",   GetStr());时候会打出“123”  
 
会输出“123”。  
  因为GetStr()返回的是字符串常量的地址,字符串常量存放在全局变量区,不会因为GetStr()地返回而被释放,而是在程序结束的时候释放。

要区分这两者  
  char   *   GetStr()  
  {  
    char   *tmp;  
   
    tmp   =   "123"  
   
    return   tmp;  
  }  
  和  
  char   *   GetStr()  
  {  
    char   tmp[]   =   "123";  
   
    return   tmp;  
  }  
   
  前者是对的,   后者是错的

。。。。。。
相关阅读 更多 +
排行榜 更多 +
时间日志iLog时间方块

时间日志iLog时间方块

商务办公 下载
豆沙追书

豆沙追书

浏览阅读 下载
京山

京山

购物比价 下载