如何给结构体变量赋初值

定义变量时请务必初始化。 特别是像数组和结构体这样消耗内存的数据结构。 使用数组时,由于未初始化,经常会发生“打孔器”这样的野值,俗称“乱码”。

每种类型的变量都有各自的初始化方法,memset ()函数可以说是初始化存储器的“万能函数”,通常进行新申请的存储器初始化工作。 通过直接操作内存空间,mem是“内存”(memory )的意思。 函数的原型如下:

的功能是用“整数”c替换指针变量s指向的前n个字节的存储单元。 请注意,c是int型。 s是void*型指针变量,因此可以初始化所有类型的数据。

memset ) )的作用是在内存块的一部分中输入特定的值。 由于只能输入一个值,因此此函数的初始化是原始初始化,不能以编程方式将变量初始化为所需数据。 用memset初始化后,用后面的程序将其存储器空间中存储必要的数据。

memset通常使用“0”初始化存储器单元,通常初始化数组或结构。 一般的变量,例如char、int、float、double等类型的变量直接初始化即可,不需要使用memset。 使用memset反而会更麻烦。

当然,也可以直接初始化数组,但由于memset直接操作内存,所以是清零初始化大数组和结构的最快方法。

此时,“字符串数组不是最好用’\ 0’初始化吗? 可以用memset初始化字符串数组吗? 也就是说,参数c可以分配给’\ 0’吗? ”

好的,不用了。 参数c需要整数,但整数类型和字符类型是互操作的。 但是,代入“\ 0”就等于0。 因为字符“\ 0”在内存中为0。 因此,在memset中初始化为0也具有结束标记“\ 0”的作用,因此通常写为“0”。

memset函数的第三个参数n的值通常由sizeof ()检索。 这很专业。 请注意,在对指针变量指向的存储单元进行清零初始化时,必须首先初始化指针变量,使其指向有效的地址。 另外,用memset初始化指针变量,例如p指向的存储单元时,n绝对不要写为sizeof。 这是初学者经常犯的错误。 因为p是指针变量,所以不管p指的是哪种类型的变量,sizeof的值都是4。

输出结果因memset函数而异,分类如下。

短信(p,0,sizeof; //地址的大小均为4字节

短信(p,0,10 ); //可以直接写10,但不专业

我要回帖

更多关于 结构体赋值几种方式 的文章

 

随机推荐