欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言函数返回指针方法

程序员文章站 2022-03-22 11:35:19
1、将函数内部定义的变量用static修饰 由于static修饰的变量,分配在静态内存区(类似于全局变量区),函数返回时,并不会释放内存,因此可以将要返回的变量加static修饰。 2、使用分配在堆上的内存 分配在堆上的内存主要指通过malloc、calloc、realloc等函数动态分配的内存,由 ......

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 }

C语言函数返回指针方法

 

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 }

C语言函数返回指针方法

另外一般要返回指针的情况,也可以用全局变量或者传入指针参数代替。