memset初始化结构体(c语言memset初始化结构体问题)
本文目录
- c语言memset初始化结构体问题
- C++ 结构体中有QString 可以用memset初始化吗
- 如何用memset将结构体的变量初始化
- C语言用memset初始化结构体变量,结构体里面有数组,需要单独初始化每个数组吗还是只初始化整个
- memset清空结构体变量
- 结构体能用memset初始化么
- C结构体成员初始化memset
c语言memset初始化结构体问题
1.memset函数的原型void *memset(void *s, char ch, size_t n);
函数的第一个形式参数是指针类型,所以实参因为一个地址,即&a
注意&a与a是不同的.a是结构体变量名,而&a是变量a的地址.
2.另外memset()是一个库函数函数,需要加头文件#include《string.h》
3.正如你所说的全局与主函数内定义变量a是有一点区别
源代码如下:
#include《stdio.h》#include《string.h》
typedef struct ss{ int num; int dir;}tent;
//tent a;
int main(){ tent a; printf("a=%p\n",a); //输出的是变量的地址
printf("&a=%p\n",&a);//注意a与&a的区别 memset(&a,0,sizeof(a)); return 0;}
主函数内运行结果:
全局变量运行结果:
这个没警告的.
已上在VC6.0下的结果
为嘛第二个没警告,暂时不清楚.但第一个有警告是合理的.
C++ 结构体中有QString 可以用memset初始化吗
其中包含对象的基本可以认为是不行。除非你对它如何实现对象的、对象的内存布局啥的非常熟悉,不然不要做这种事,程序会出错到你都不知道是怎么错的
如何用memset将结构体的变量初始化
加一个构造函数即可(这好像是C++的内容哦)修改如下:将struct DNA{ char str; int seq;}s;改成:struct DNA{ DNA(){seq = 0;}; char str; int seq;}s;其中DNA(){seq = 0;};即为构造函数
C语言用memset初始化结构体变量,结构体里面有数组,需要单独初始化每个数组吗还是只初始化整个
memset(boxes.a, 0, sizeof(int)*16);\r\n注意:memset只能初始化值为0,因为memset是按byte为单位进行赋值
memset清空结构体变量
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。需要的头文件《memory.h》or《string.h》函数原型 void*memset(void*s,intch,unsignedn);程序例 #include《string.h》 #include《stdio.h》 #include《memory.h》memset函数intmain(void) { charbuffer="Helloworld/n"; printf("Bufferbeforememset:%s/n",buffer); memset(buffer,’*’,strlen(buffer)); printf("Bufferaftermemset:%s/n",buffer); return0; } 输出结果: Bufferbeforememset:Helloworld Bufferaftermemset:************ 编译平台: MicrosoftVisualC++6.0 也不一定就是把内容全部设置为ch指定的ASCII值,而且该处的ch可为int或者其他类型,并不一定要是char类型。例如下面这样: intarray={1,4,3,5,2}; for(inti=0;i《5;i++) cout《《array《《""; cout《《endl; memset(array,0,5*sizeof(int)); for(intk=0;k《5;k++) cout《《array《《""; cout《《endl; 输出的结果就是: 14352 00000 后面的表大小的参数是以字节为单位,所以,对于int或其他的就并不是都乘默认的1(字符型)了。而且不同的机器上int的大小也可能不同,所以最好用sizeof()。 , 要注意的是,memset是对字节进行操作 所以上述程序如果改为 intarray={1,4,3,5,2}; for(inti=0;i《5;i++) cout《《array《《""; cout《《endl; memset(array,1,5*sizeof(int));//注意这里与上面的程序不同 for(intk=0;k《5;k++) cout《《array《《""; cout《《endl; 输出的结果就是: 14352 1684300916843009168430091684300916843009 因为memset是以字节为单位就是对array指向的内存的5个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
结构体能用memset初始化么
可以。比如:struct MY_STRUCT{ ....};MY_STRUCT s;memset(&s, 0xAD, sizeof(MY_STRUCT));
C结构体成员初始化memset
memset(&str, 0, sizeof(str))对结构体成员进行初始化,是没有问题的,int型会被初始化成0,char型会被初始化成0。0有多种解释方法,可以是数字0,也可以是字符串结束符号\0,当然,也可以是NULL。但是,有一个问题,并不是所有的操作系统,所有的编译器都将0当做字符串结束符合和指针的NULL的。你把0当做NULL用,在特定的系统下是没问题的,但可移植性就差了。
更多文章:
kindle下载免费书网站(如何下载免费的电子书到kindle上)
2024年6月29日 09:46
盎格鲁-撒克逊人的处事思想为什么和春秋战国时期的楚国那么相似?你这辈子最大的幻想是什么
2023年11月23日 16:40
最终幻想勇气启示录幻影战争(最终幻想战略版狮子战争勇气和信仰什么用,怎么增加)
2024年5月7日 21:53
2022年所有券商排名(兴业证券公司在2022年中国证券在排名榜居第几位)
2024年8月29日 10:20
嗨来电都有哪些好听的铃声?嗨来电铃声怎么设置 嗨来电铃声设置步骤
2024年7月19日 19:40
怎样和社区的邻居交朋友有什么要注意的?朋友的社区便利店23万包含所有转让,是否可以接手
2024年3月4日 15:35