c语言5 gt 3大于1,C语言深入学习--checklist5:sizeof、指针、动态分配内存

本文详细介绍了C语言中的函数指针用法,包括定义、赋值及调用方式。同时,讨论了sizeof运算符的作用和返回值,以及在字符数组和字符串中的应用。此外,还探讨了动态内存分配,讲解了何时需要动态分配内存以及如何避免内存泄漏,并提到了内存检测工具的使用方法。
摘要由CSDN通过智能技术生成

# include

void MyFun(int x);

void (*FunP)(int);

typedef void (*FunPtr)(int); //定义某一函数指针的类型

int main(int argc, char* argv[])

{

MyFun(10);

FunP = &MyFun;

(*FunP)(20); //调用方式1

FunP(30); //调用方式2

FunP = MyFun;

(*FunP)(40); //调用方式3

FunP(50); //调用方式4

FunPtr p1;

p1 = MyFun;

p1(60);

(*p1)(70);

p1 = &MyFun;

p1(80);

p1(90);

return 0;

}

void MyFun(int x)

{

printf("%d/n",x);

} sizeof

1.对于字符数组,sizeof与strlen的值是否相同?

字符串数组,最后一个都是结束符’/0’,sizeof()计算占据的总内存空间,而strlen只是计算除开’/0’的字符数(可以见标准库的strlen的实现)

2.Sizeof本质上是函数还是宏?

Sizeof是一个运算符。

3.Sizeof返回值是什么?

Sizeof返回值是size_t,定义为unsigned int

指针

1.int *p; &p,p,*p各有什么意思?

&p:该指针的地址;

P:该指针的内容:一个内存地址;

*p:p中内存地址对应相应的值;

2.你定义的指针初始化了没?

3.你理解指针的指针的概念吗?你会使用吗?

指针的指针:它的内容就是一个指针(地址),:如char **argv;如指针数组char *p[10]

4.你会定义函数指针?

void (*p)(int )

P是一个指针,它指向了一个函数,该函数没有返回值,参数是一个int变量;

typdef void (*p)(int);

p f1;

p f2;就可以类似地定义函数指针了。

5.你会使用函数指针调用函数吗?

函数名与函数指针都一样的,都是函数指针。函数名是一个const函数指针,而函数指针是一个函数指针变量。至于四种调用方法都可以,那是C语言的设计者规定的,主要是书写和阅读方便.

动态分配内存

1.动态分配的内存放在什么地方?

堆。

2.什么情况下要动态分配内存?

malloc使用的情况一般有两种:1.需要申请的内存太大了,一般栈的内存为1M,如果数组大于栈内存,就要malloc2.申请的内存大小不定,例如你要使用大小为n的内存,但是n是多少你并不知道,这时没法用char k[n];因为编译器不支持你用变量n来声明数组,此时要用malloc

2.动态申请的内存一定要释放,否则会内存泄露。你是否使用过内存检测工具?

《C专家编程中》的第七章亦对该问题有描述,简单摘要如下:

避免内存泄露:

每次当调用malloc分配内存的时候,注意在以后调用相应的free来释放它。

一种简单的方法就是在可能的时候使用alloca()来分配动态内存,以避免出现上述情况。当离开调用alloca的函数,它所分配的内存会被自动释放。(注:alloca函数是依赖于机器和编译器的,没有较好的可移植性,注意不要使用free释放alloca分配的空间.)

如何检测内存泄露

1.使用swap命令观察还有多少可用的交换空间

在一分钟内键入该命令三到四次,看看可用的交换区是否在减小。如果发现不断有内存被分配且从不被释放,一个可能的解释就是出现了内存泄露;

2.确定可疑的进程,看看它是不是该为内存泄露负责。

使用ps – lu用户名来显示所有进程的大小。同样数次重复这个命令,如果一个进程不断增长而从不缩小,那么它就有可能出现了内存泄露。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值