《C專家編程》之一

來源:互聯網
上載者:User

標籤: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專家編程》之一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.