2016 - 2024

感恩一路有你

c语言判断指针是否为空 既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?

浏览量:1552 时间:2021-03-13 18:52:21 作者:admin

既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?

看了下面兄弟的回信,我们只能说他们一半是对的。

真正的原因是abi(应用程序二进制接口)。

ABI定义了与系统交互的细节,如数据类型、大小和对齐方式;调用约定(控制函数的参数传递方向、可变长度处理、堆栈清理体以及如何接受返回值等);系统调用的编码以及应用程序如何对操作系统进行系统调用系统;以及采用完整ABI操作系统基本格式、程序库等的第二代对象文件。完整的ABI,如英特尔二进制兼容标准(IBCs),允许支持它的操作系统上的程序在支持此ABI的其他操作系统上运行,而无需修改。

其他ABI标准化细节包括C名称修改和同一平台上编译器之间的调用约定,但不包括跨平台兼容性。

至于下面兄弟提到的eax save返回值,这只是X86的ABI规范。在其他CPU架构平台(如PowerPC)中,实现是不同的!--PowerPC,返回值存储在R3寄存器中

暂时不懂你的代码。

一个原则是,谁是起点。

如果指向此函数中定义的临时自动数组,则返回本地数组指针时一定会出现问题,这就是所谓的内存释放问题。

这样,虽然指针返回,但它指向的内容不再受代码控制,这是非常危险的。

但是如果Start是指main函数中声明的数组,或者是全局或静态数组(在这个函数中定义的静态数组是可以的),或者是动态分配方法得到的内存空间没有释放,那么就没有问题,是完全合理合法的。

使用动态分配方法时,不使用时要注意释放内存空间,以免内存泄漏。

C语言指针函数释放内存?

简而言之,指针是表示地址的无符号整数。

所以仅仅理解指针是不够的。您还需要知道指针指向的数据空间是如何排列的。这可能涉及到一些与特定CPU/OS相关的知识。如果我们能用计算机体系结构的知识来理解它,它会更深刻、更准确。

例如:

如何存储float/double/long double?

如何在数据空间中组织阵列?

字符串是如何存储的?

如何存储结构和联合体?

位域组织

具体CPU相关部分如下:

整数的存储将涉及CPU大小的指定

浮点数的存储直接关系到FPU的设计

此外,还有一些扩展知识,涉及内存的分配和释放:如何在程序中分配内存?(malloc/free)

什么是堆和堆栈?

总而言之:指针是地址和整数。但要充分利用它,我们需要了解计算机存储空间的分配。困难在这里,突破在这里。

c语言判断指针是否为空 c语言释放指针 C语言指针的定义

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。