C语言基础知识(11)

文章讨论了C++中的sprintf函数,它用于将数据格式化到缓冲区而不是直接打印。栈数据结构遵循先进后出的原则,使用push和pop操作。new和delete是C++的关键字,涉及对象的构造和析构,以及内存的动态分配和释放,与malloc/free不同,new能处理类型安全和构造过程。此外,文章还提及了没有main()函数的程序可以编译但不能执行,以及算法在程序设计中的重要性。

sprintf()函数的作用是什么

sprintf()代表 “字符串打印(string print)”。sprintf()函数并不在控制台屏幕上打印输出。它将数据传输到缓冲区。它返回字符串中存在的总字符数

如何向栈数据结构里面存储数据

这样的数据是先进后出的。只有顶部的数据才可以被访问到。存储的时候使用push,获取的时候使用pop

new和malloc的区别

new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持;

使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。

new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。

new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。

new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现)。malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。

可以编译一个没有main()函数的程序吗

是的,我们可以编译,但不能执行。但是,如果使用#define,就可以在不使用main()函数的情况下编译和运行一个C语言程序

C程序算法的意义是什么

算法的意义在于提高程序的执行效率,是注重空间的节省,还是注重时间的节省,是写算法时需要考虑的因素

new和delete的实现原理, delete是如何知道释放内存的大小的

new简单类型直接调用operator new分配内存;而对于复杂结构,先调用operator new分配内存,然后在分配的内存上调用构造函数;对于简单类型,new[]计算好大小后调用operator new;对于复杂数据结构,new[]先调用operator new[]分配内存,然后在p的前四个字节写入数组大小n,然后调用n次构造函数,针对复杂类型,new[]会额外存储数组大小;

new表达式调用一个名为operator new(operator new[])函数,分配一块足够大的、原始的、未命名的内存空间;

编译器运行相应的构造函数以构造这些对象,并为其传入初始值;

对象被分配了空间并构造完成,返回一个指向该对象的指针。

delete简单数据类型默认只是调用free函数;复杂数据类型先调用析构函数再调用operator delete;针对简单类型,delete和delete[]等同。假设指针p指向new[]分配的内存。因为要4字节存储数组大小,实际分配的内存地址为[p-4],系统记录的也是这个地址。delete[]实际释放的就是p-4指向的内存。而delete会直接释放p指向的内存,这个内存根本没有被系统记录,所以会崩溃。

需要在 new [] 一个对象数组时,需要保存数组的维度,C++ 的做法是在分配数组空间时多分配了 4 个字节的大小,专门保存数组的大小,在 delete [] 时就可以取出这个保存的数,就知道了需要调用析构函数多少次了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyi9812

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值