我们常用memset对int数组进行初始化,替换数字可以是0或-1,但若为其他数字呢?
测试代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
int a[20];
int main()
{
for (int i = -4; i < 260; i++)
{
memset(a, i, sizeof(a));
printf("%d : %d\n", i, a[13]);
}
return 0;
}
测试结果:(对数组a中的其他数也一样)
-4 : -50529028
-3 : -33686019
-2 : -16843010
-1 : -1
0 : 0
1 : 16843009 ///已经比较大了(10^7)
2 : 33686018
3 : 50529027
4 : 67372036
5 : 84215045
6 : 101058054
7 : 117901063
8 : 134744072
9 : 151587081
10 : 168430090
11 : 185273099
12 : 202116108
13 : 218959117
14 : 235802126
15 : 252645135
16 : 269488144
17 : 286331153
18 : 303174162
19 : 320017171
20 : 336860180
21 : 353703189
22 : 370546198
23 : 387389207
24 : 404232216
25 : 421075225
26 : 437918234
27 : 454761243
28 : 471604252
29 : 488447261
30 : 505290270
31 : 522133279
32 : 538976288
33 : 555819297
34 : 572662306
35 : 589505315
36 : 606348324
37 : 623191333
38 : 640034342
39 : 656877351
40 : 673720360
41 : 690563369
42 : 707406378
43 : 724249387
44 : 741092396
45 : 757935405
46 : 774778414
47 : 791621423
48 : 808464432
49 : 825307441
50 : 842150450
51 : 858993459
52 : 875836468
53 : 892679477
54 : 909522486
55 : 926365495
56 : 943208504
57 : 960051513
58 : 976894522
59 : 993737531
60 : 1010580540
61 : 1027423549
62 : 1044266558
63 : 1061109567 ///编程中常用:memset(a,0x3f,sizeof(a)); (0x3f3f3f3f的十进制是1061109567)
///请参考这篇文章
64 : 1077952576
65 : 1094795585
66 : 1111638594
67 : 1128481603
68 : 1145324612
69 : 1162167621
70 : 1179010630
71 : 1195853639
72 : 1212696648
73 : 1229539657
74 : 1246382666
75 : 1263225675
76 : 1280068684
77 : 1296911693
78 : 1313754702
79 : 1330597711
80 : 1347440720
81 : 1364283729
82 : 1381126738
83 : 1397969747
84 : 1414812756
85 : 1431655765
86 : 1448498774
87 : 1465341783
88 : 1482184792
89 : 1499027801
90 : 1515870810
91 : 1532713819
92 : 1549556828
93 : 1566399837
94 : 1583242846
95 : 1600085855
96 : 1616928864
97 : 1633771873
98 : 1650614882
99 : 1667457891
100 : 1684300900
101 : 1701143909
102 : 1717986918
103 : 1734829927
104 : 1751672936
105 : 1768515945
106 : 1785358954
107 : 1802201963
108 : 1819044972
109 : 1835887981
110 : 1852730990
111 : 1869573999
112 : 1886417008
113 : 1903260017
114 : 1920103026
115 : 1936946035
116 : 1953789044
117 : 1970632053
118 : 1987475062
119 : 2004318071
120 : 2021161080
121 : 2038004089
122 : 2054847098
123 : 2071690107
124 : 2088533116
125 : 2105376125
126 : 2122219134
127 : 2139062143 ///最大,与2^31相差约0.4%
128 : -2139062144 ///最小
129 : -2122219135
130 : -2105376126
131 : -2088533117
132 : -2071690108
133 : -2054847099
134 : -2038004090
135 : -2021161081
136 : -2004318072
137 : -1987475063
138 : -1970632054
139 : -1953789045
140 : -1936946036
141 : -1920103027
142 : -1903260018
143 : -1886417009
144 : -1869574000
145 : -1852730991
146 : -1835887982
147 : -1819044973
148 : -1802201964
149 : -1785358955
150 : -1768515946
151 : -1751672937
152 : -1734829928
153 : -1717986919
154 : -1701143910
155 : -1684300901
156 : -1667457892
157 : -1650614883
158 : -1633771874
159 : -1616928865
160 : -1600085856
161 : -1583242847
162 : -1566399838
163 : -1549556829
164 : -1532713820
165 : -1515870811
166 : -1499027802
167 : -1482184793
168 : -1465341784
169 : -1448498775
170 : -1431655766
171 : -1414812757
172 : -1397969748
173 : -1381126739
174 : -1364283730
175 : -1347440721
176 : -1330597712
177 : -1313754703
178 : -1296911694
179 : -1280068685
180 : -1263225676
181 : -1246382667
182 : -1229539658
183 : -1212696649
184 : -1195853640
185 : -1179010631
186 : -1162167622
187 : -1145324613
188 : -1128481604
189 : -1111638595
190 : -1094795586
191 : -1077952577
192 : -1061109568
193 : -1044266559
194 : -1027423550
195 : -1010580541
196 : -993737532
197 : -976894523
198 : -960051514
199 : -943208505
200 : -926365496
201 : -909522487
202 : -892679478
203 : -875836469
204 : -858993460
205 : -842150451
206 : -825307442
207 : -808464433
208 : -791621424
209 : -774778415
210 : -757935406
211 : -741092397
212 : -724249388
213 : -707406379
214 : -690563370
215 : -673720361
216 : -656877352
217 : -640034343
218 : -623191334
219 : -606348325
220 : -589505316
221 : -572662307
222 : -555819298
223 : -538976289
224 : -522133280
225 : -505290271
226 : -488447262
227 : -471604253
228 : -454761244
229 : -437918235
230 : -421075226
231 : -404232217
232 : -387389208
233 : -370546199
234 : -353703190
235 : -336860181
236 : -320017172
237 : -303174163
238 : -286331154
239 : -269488145
240 : -252645136
241 : -235802127
242 : -218959118
243 : -202116109
244 : -185273100
245 : -168430091
246 : -151587082
247 : -134744073
248 : -117901064
249 : -101058055
250 : -84215046
251 : -67372037
252 : -50529028
253 : -33686019
254 : -16843010
255 : -1 ///回来了
256 : 0
257 : 16843009
258 : 33686018
259 : 50529027
对于“1=16843009”的说明:
memset是以字节为单位进行赋值,每个都用 ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。而一个int类型是4字节,合一起就是 00000001000000010000000100000001,相当于(1<<24)+(1<<16)+(1<<8)+1 = 16843009。