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

《C专家编程》之一

时间:2014-09-09 18:09:59      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   ar   strong   for   数据   div   

一、解决函数返回指针的几种方法

  1. 返回一个指向字符串常量的指针。

  例子:

char* func()
{
    rturn "Only work for simple strings";
}

 

  优点:简单

  缺点:如果你需要计算字符串的内容,这种方法就无能为力了。如果以后需要修改返回的字符串,你也会遇到麻烦!

  2. 使用全局声明的数组。

  例子:

char my_global_array[255];

char* func()
{
    my_global_array[0] = 0;
    return my_global_array;
}

 

  优点:适用于自己创建的字符串,简单易用。

  缺点:任何人都有可能在任何时候修改这个全局数组,而且该函数的下一次调用也会覆盖该数组的内容。

  3. 使用静态数组。

  例子:

char* func()
{
    static char buff[20];
    buff[0] = 0;
    return buff;
}

 

  优点:可以防止任何人都修改这个数组,只有拥有指向该数组的指针的函数(通过参数传递给它)才能修改这个静态数组。

  缺点:但是,该函数的下一次调用将覆盖这个数组的内容,所以调用者必须在此之前使用或备份数组的内容。和全局数据一样,大型缓冲区如果闲置不用是非常浪费内存空间的。

  4. 显式地分配一些内存,保存返回的值。

  例子:

char* func()
{
    char *s = malloc(120);
    ...
    return s;
}

 

  优点:这个方法具有静态数组的优点,而且在每次调用时都创建一个新的缓冲区,所有该函数以后的调用不会覆盖以前的返回值。它适用于多线程的代码。

  缺点:程序员必须承担起内存管理的责任。

  5. 要求调用者分配内存类保存函数的返回值。程序员 malloc 和 free

  例子:

void func(char* result, int size)
{
    ...
    strncpy(result, "that‘d be in the data segment, Bob", size);
}

buffer = malloc(size);
func(buffer, size);
...
free(buffer);

 

  优点:内存管理比较轻松。

  缺点:程序员还是需要自己管理内存,但是相比起第4种方法而言,malloc和free成对出现,管理内存会更方便。

 

 

二、关于声明

2.1 一些不能

  1. 函数的返回值不能是一个函数;foo() ()是非法的。

  2. 函数的返回值不能是一个数组;foo()[0]是非法的。

  3. 数组里面不能有函数;foo[]()是非法的。

 

  

 

《C专家编程》之一

标签:style   blog   color   使用   ar   strong   for   数据   div   

原文地址:http://www.cnblogs.com/wiessharling/p/3962931.html

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