也不一定就是把内容全部设置为ch指定的ASCⅡ值,而且该处的ch可为int或者其他类型,并不一定要是char类型。例如下面这样:
|
1
2
3
4
5
6
7
8
9
|
intarray[5]={1,4,3,5,2}; for(inti=0;i<5;i++) cout<<array[i]<<""; cout<<endl; memset(array,0,5*sizeof(int)); for(intk=0;k<5;k++) cout<<array[k]<<""; cout<<endl; |
输出的结果就是:
|
1
2
|
14352 00000 |
后面的表大小的参数是以字节为单位,所以,对于int或其他的就并不是都乘默认的1(字符型)了。而且不同的机器上int的大小也可能不同,所以最好用sizeof()。
要注意的是,memset是对字节进行操作,
所以上述程序如果改为
|
1
2
3
4
5
6
7
8
9
|
intarray[5]={1,4,3,5,2}; for(inti=0;i<5;i++) cout<<array[i]<<""; cout<<endl; memset(array,1,5*sizeof(int));//注意这里与上面的程序不同 for(intk=0;k<5;k++) cout<<array[k]<<""; cout<<endl; |
输出的结果就是:
|
1
2
|
14352 1684300916843009168430091684300916843009 |
为什么呢?
|
1
|
00000001000000010000000100000001 |
就等于16843009,就完成了对一个INT元素的赋值了。
所以用memset对非字符型数组赋初值是不可取的!
例如有一个结构体Some x,可以这样清零:
|
1
|
memset(&x,0,sizeof(Some)); |
|
1
|
memset(x,0,sizeof(Some)*10); |
浙公网安备 33010602011771号