C语言中,使用一个结构体之前,要用memset把各个位清零???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中,使用一个结构体之前,要用memset把各个位清零???相关的知识,希望对你有一定的参考价值。

这是为什么???

这是在对结构体进行初始化,下面是对memset的详细解释:
原型: void *memset(void *s,int ch,size_t n);
头文件:#include<string.h>
作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,该函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。,它是对较大的结构体或数组进行清零操作的一种最快方法。
参考技术A 初始化用的。
确保你使用的这块内存已经初始化了,否则结构体这块内存里面是随机值,容易误用导致不可预知的后果,严重的可能导致程序崩溃。追问

memset是自动隐藏进行的,还是需要人为来设定这个memset这个步骤的?

追答

人为的。c/c++的初始化需要手动写代码。
obj-c和java是编译器帮忙做的。

本回答被提问者采纳
参考技术B C语言的结构体必须手动初始化,其实你不memset也可以的,但是结构体里面的数据将不可知(不是随机值),万一你忘记给其中的数据成员赋值就使用,会导致不可预知的后果。
memset必须手动执行,不是自动的。

声明后立刻初始化变量是一个非常重要的良好习惯。

C++的话可以通过构造函数来做。
参考技术C 那叫初始化

c语言数据结构中结构体定义问题

typedef struct student

int num;
struct student *next;
student;

如题中,struct student还没被定义出来,为什么就可以用来定义*next了?如果是这样,*next到底是什么类型?
struct student 这个结构体?

编译器逐行解析,在定义next之前,编译器已经知道struct student这个结构类型的存在,所以可以用它来定义next。

next是指向struct student结构的指针类型。一般像这种用法,都是用在单向链表的结点结构体中,next用于指向下一个结点。

next不是基本数据类型的指针,而是结构体指针,指针不一定只能指向基本类型,它可以指向任意形式的内存空间。

next可以指向它所属的结构体本身,这样就是形成一个只有一个结点的单向循环链表。
参考技术A next 只是一个地址
他可以是任意结构 不是因为未定义 而他地址指向的不能代表未定义的student结构体
只是代表一个地址而已 不同的是地址后面存放的是什么

哥哥 你别老局限与C语言的结构 指针代表的是地址 他指向的可以是任意结构

以上是关于C语言中,使用一个结构体之前,要用memset把各个位清零???的主要内容,如果未能解决你的问题,请参考以下文章

C结构体成员初始化memset

Keil中C语言模块化编程时全局变量、结构体处理细节

零基础学C语言内存知识总结:memset函数和calloc函数

c语言memset()函数

c语言如何在多个c文件里同时使用一个结构体?

C语言中,memset函数都可以给啥类型的数组清零?