C语言 结构体使用malloc动态申请内存时,关于如何初始化结构体的解决方法

文章目录

  • 2. 使用memset函数
    • 2.1 memset函数详解
    • 2.2 实例
  • 3. 使用calloc函数
    • 3.1 函数详解
    • 3.2 实例

2. 使用memset函数

2.1 memset函数详解

  • 2.1.1 函数原型:void *memset(void *str,int nur,size_t n);
  • 2.1.2 所在头文件:string.h 或 memory.h
  • 2.1.3 作用:将str中前n个字节替换为nur并返回str
  • 2.1.4 优点:是对较大的结构体或数组进行清零操作的一种最快方法
  • 2.1.4 注意事项:由于nur是int类型的,需要注意以下两点:
    • 2.1.4.1 若str指向的地址是char类型的,nur的值可以是任意字符值;

    • 2.1.4.2 若s指向的地址不是char类型,nur的值只能是-1或者0。

    • 原因:因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。

2.2 实例

memset( str,0,sizeof(str) );
将上面的studentPointer指向的动态申请的内存初始化
memset( studentPointer,0,sizeof(struct student) );
运行结果

C语言 结构体使用malloc动态申请内存时,关于如何初始化结构体的解决方法_第1张图片

3. 使用calloc函数

3.1 函数详解

  • 函数原型:void* calloc(unsigned int num,unsigned int size)
  • 所在头文件:stdlib.h
  • 动态申请内存函数之一,相当于用malloc函数申请并且初始化一样,calloc函数会将申请的内存全部初始化为0;
  • 因此,可以直接用calloc函数,不用malloc函数,两者的区别就是一个会将申请的内存初始化,一个不会,大家按自己的需要来使用。

3.2 实例

#include 
#include 
#include 

struct node {
	char name[10];
	int number;
	struct node *next;
};
void main() {
	struct node *Herd;
	Herd = (struct node *)calloc(1, sizeof(struct node));
	system("pause");
}
运行结果

在这里插入图片描述

本人撰写博客纯粹为记录自己在学习过程的遇到的困难、问题的解决办法。如有错误,请大家不吝指教!谢谢!

你可能感兴趣的:(C语言笔记)