C语言——动态内存管理带示例

C语言——动态内存管理带示例

分享示例代码加自己的注释 + 赠送十进制转换二进制(最大两个字节)

例程使用
在这里插入图片描述

动态内存管理

void *malloc( size_t size )  内存分配函数 
free ()   释放内存空间函数
 /*  1   函数返回为空
         C中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);

     2   函数参数为空
         C中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);

     3   指针指向 void
         类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 */
#include <stdio.h>
#include <stdlib.h>

int main()
{
     int *pInt = NULL;
     pInt = (int *)malloc(sizeof(int)); // 申请4字节的空间  ---->成功申请的空间可以用于存放int类型数据
                                        // 将void*转成int*----->pInt
     if (*pInt != '\0')                 // 解决方法:将NULL换为 '\0',也就是string的终止符号(在c语言里string是用char[]数组表示的,每个char数组的最后都会加上终止符号’\0’来表示string结束,
     {
         *pInt = 123;
         printf("%d\r\n", *pInt);
         free(pInt);                    // free ()是C语言中释放内存空间的函数,通常与申请内存空间的函数malloc ()结合使用,可以释放由 malloc ()、calloc ()、realloc () 等函数申请的内存空间。
     }
     double *pDouble = NULL;
     pDouble = (double *)malloc(sizeof(double)); // 申请8字节的空间  ---->成功申请的空间可以用于存放double类型数据
                                                 // 将void*转成double*----->pDouble

     if (pDouble != NULL)
     {
         *pDouble = 3.1415926;
         printf("%f\r\n", *pDouble);
         free(pDouble);//
     }
     return 0;
 }

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>


int *func(int n)     //创建n个int元素的数组
{
    int *pArr = NULL;
    pArr = malloc(sizeof(int) * n);
    if (pArr == NULL)
    {
        return pArr;
    }
    for (int i = 0; i < n; i++)
        pArr[i] = i;
    return pArr;
}

int main()
{
    int n = 10;
    int *p = func(n);  //func(n)————————>指向数组首元素
    if (p != NULL)     //保证func返回的数据有效
    {
        for (int i = 0; i < n; i++)
            printf("%d ", p[i]);   //p[i]————————>指针偏移访问数组元素
        free(p);
    }
    return 0;
}

在这里插入图片描述

十进制转换二进制程序

#include <stdio.h>

void printBinary(unsigned short dec) // 无符号2个字节
{
    unsigned char bits[16] = {0}; // 0 到 255
    unsigned char count = 0;      //-128 到 127
    unsigned int quotient;
    unsigned int remainder;

    while (dec > 0)
    {
        remainder = dec % 2;
        quotient = dec / 2;
        dec = quotient;
        bits[count] = remainder;
        count++;
    }
    for (int i = 16 - 1; i >= 0; i--)
        printf("%d", bits[i]);
}
void main()
{
    printBinary(65535);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没有余地 EliasJie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值