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);
}