函数指针,malloc,static

  • Post author:
  • Post category:其他


指针函数:返回值为指针的函数

#include <stdio.h>

2

3

4 char *fun()

5 {


6     char str[] = “hello world!”;

7     return str;

8 }

9

10 int main()

11 {


12     char *p = fun();

13     puts(p);

14     return 0;

15 }

得不到想要的结果,打印出来的内容为随机值

原因:str为局部变量,生命周期从定义开始到函数执行结束就结束了

所以:p指向了一块已经被释放掉的内存空间

怎么解决:延长str的生命周期

1、static–》延长该局部变量的生命周期

2、malloc

char *fun()

7 {

8     //static char str[] = “hello world!”;

9     char *str = (char *)malloc(100);

10     if(NULL == str)

11     {

12         printf(“malloc error!\n”);

13         return NULL;

14     }

15     memset(str, 0, 100);

16     strcpy(str, “hello world!”);

17     return str;

18 }

19

20 int main()

21 {

22     char *p = fun();

23     puts(p);

24     free(p);

25     p = NULL;  //防止再去操作已经被释放掉的内存空间

26     return 0;

27 }


malloc:程序员在堆区手动申请内存空间

free:程序员手动释放申请的空间

void *malloc(size_t size);

参数:size–要申请的字节数

返回值:成功:申请到的内存空间的首地址

失败:NULL—内存不足时

void free(void *ptr);

参数:ptr–要释放的内存空间的首地址

void *memset(void *s, int c, size_t n);

功能:使用一个字节的常量填充一块内存空间

一般用于清空一块内存空间,也就是这个常量为0

参数:s–要操作的内存空间的首地址

c–常量

n–要操作的内存空间的大小

返回值:要操作的内存空间的首地址


int


*p;


p = (


int


*)


malloc


(


sizeof


(


int


) * 128);


//分配128个整型存储单元,并将这128个连续的整型存储单元的首地址存储到指针变量p中


double


*pd = (


double


*)


malloc


(


sizeof


(


double


) * 12);


//


分配12个double型存储单元,并将首地址存储到指针变量pd中

free(p);

free(pd);

p = NULL;

pd = NULL;

指针用完赋值NULL是一个很好的习惯。



版权声明:本文为qq_31918961原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。