C語言函數返回指針方法


1、將函數內部定義的變量用static修飾

由於static修飾的變量,分配在靜態內存區(類似於全局變量區),函數返回時,並不會釋放內存,因此可以將要返回的變量加static修飾。

 1 int *test_func()
 2 {
 3     static int local_data;  //加static修飾
 4     local_data = 10;
 5 
 6     printf("Function local_data : %d\n", local_data);
 7 
 8     return &local_data;
 9 }
10 
11 int main()
12 {
13     int *main_data = NULL;
14 
15     main_data = test_func();
16 
17     printf("Return data: %d\n", *main_data);
18 
19     return 0;
20 }

 

2、使用分配在堆上的內存

分配在堆上的內存主要指通過malloc、calloc、realloc等函數動態分配的內存,由於堆上的內存需要手動釋放,因此可以在使用完以后再釋放,這樣指針就不會指向未知。

注意:堆上的內存必須要用完即釋放,否則容易造成內存泄漏。

 1 int *local_data_test()
 2 {
 3     int *plocal_data;
 4 
 5     plocal_data = (int *)malloc(sizeof(int));
 6     *plocal_data = 20;
 7 
 8     printf("Function plocal_data value: %d\n", *plocal_data);
 9 
10     return plocal_data;
11 }
12 
13 int main()
14 {
15     int *main_data = NULL;
16     
17     main_data = local_data_test();
18 
19     printf("Return data: %d\n", *main_data);
20     free(main_data);
21     main_data = NULL;
22 
23     return 0;
24 }

另外一般要返回指針的情況,也可以用全局變量或者傳入指針參數代替。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM