|
|
1.1 root 1:
2:
3: initialization Definition initialization
4:
5:
6:
7:
8: The term initialization refers to setting a variable to its
9: first, or initial, value.
10:
11: ***** Rules of Initialization *****
12:
13: Initializers follow the same rules for type and conversion as do
14: assignment statements.
15:
16: If a static object with a scalar type is not explicitly in-
17: itialized, it is initialized to zero by default. Likewise, if a
18: static pointer is not explicitly initialized, it is initialized
19: to NULL by default. If an object with automatic storage duration
20: is not explicitly initialized, its contents are indeterminate.
21:
22: Initializers on static objects must be constant expressions;
23: greater flexibility is allowed for initializers of automatic
24: variables. These latter initializers can be arbitrary expres-
25: sions, not just constant expressions. For example,
26:
27:
28: double dsin = sin(30.0);
29:
30:
31: is a valid initializer, where dsin is declared inside a function.
32:
33: To initialize an object, use the assignment operator `='. The
34: following sections describe how to initialize different classes
35: of objects.
36:
37: ***** Scalars *****
38:
39: To initialize a scalar object, assign it the value of a expres-
40: sion. The expression may be enclosed within braces; doing so
41: does not affect the value of the assignment. For example, the
42: expressions
43:
44:
45: int example = 7+12;
46:
47:
48: and
49:
50:
51: int example = { 7+12 };
52:
53:
54: are equivalent.
55:
56: ***** Unions and Structures *****
57:
58: The initialization of a union by definition fills only its first
59: member.
60:
61:
62:
63:
64: COHERENT Lexicon Page 1
65:
66:
67:
68:
69: initialization Definition initialization
70:
71:
72:
73: To initialize a union, use an expression that is enclosed within
74: braces:
75:
76:
77: union example_u {
78: int member1;
79: long member2;
80: float member3;
81: } = { 5 };
82:
83:
84: This initializes member1 to five. That is to say, the union is
85: filled with an iinntt-sized object whose value is five.
86:
87: To initialize a structure, use a list of constants or expressions
88: that are enclosed within braces. For example:
89:
90:
91: struct example_s {
92: int member1;
93: long member2;
94: union example_u member3;
95: };
96:
97:
98:
99: struct example_s test1 = { 5, 3, 15 };
100:
101:
102: This initializes member1 to five, initializes member2 to three,
103: and initializes the first member of member3 to 15.
104:
105: ***** Strings and Wide Characters *****
106:
107: To initialize a string pointer or an array of wide characters,
108: use a string literal.
109:
110: The following initializes a string:
111:
112:
113: char string[] = "This is a string";
114:
115:
116: The length of the character array is 17 characters: one for every
117: character in the given string literal plus one for the null
118: character that marks the end of the string.
119:
120: If you wish, you can fix the length of a character array. In
121: this case, the null character is appended to the end of the
122: string only if there is room in the array. For example, the
123: following
124:
125:
126:
127:
128:
129:
130: COHERENT Lexicon Page 2
131:
132:
133:
134:
135: initialization Definition initialization
136:
137:
138:
139: char string[16] = "This is a string";
140:
141:
142: writes the text into the array string, but does not include the
143: concluding null character because there is not enough room for
144: it.
145:
146: A pointer to char can also be initialized when the pointer is
147: declared. For example:
148:
149:
150: char *strptr = "This is a string";
151:
152:
153: initializes strptr to point to the first character in This is a
154: string. This declaration automatically allocates exactly enough
155: storage to hold the given string literal, plus the terminating
156: null character.
157:
158: ***** Arrays *****
159:
160: To initialize an array, use a list of expressions that is
161: enclosed within braces. For example, the expression
162:
163:
164: int array[] = { 1, 2, 3 };
165:
166:
167: initializes array. Because array does not have a declared number
168: of elements, the initialization fixes its number of elements at
169: three. The elements of the array are initialized in the order in
170: which the elements of the initialization list appear. For ex-
171: ample, array[0] is initialized to one, array[1] to two, and ar-
172: ray[2] to three.
173:
174: If an array has a fixed length and the initialization list does
175: not contain enough initializers to initialize every element, then
176: the remaining elements are initialized in the default manner:
177: static variables are initialized to zero, and other variables to
178: whatever happens to be in memory. For example, the following:
179:
180:
181: int array[3] = { 1, 2 };
182:
183:
184: initializes array[0] to one, array[1] to two, and array[2] to
185: zero.
186:
187: The initialization of a multi-dimensional array is something of a
188: science in itself. The ANSI Standard defines that the ranks in
189: an array are filled from right to left. For example, consider
190: the array:
191:
192:
193:
194:
195:
196: COHERENT Lexicon Page 3
197:
198:
199:
200:
201: initialization Definition initialization
202:
203:
204:
205: int example[2][3][4];
206:
207:
208: This array contains two groups of three elements, each of which
209: consists of four elements. Initialization of this array will
210: proceed from example[0][0][0] through example[0][0][3]; then from
211: example[0][1][0] through example[0][1][3]; and so on, until the
212: array is filled.
213:
214: It is easy to check initialization when there is one initializer
215: for each ``slot'' in the array; e.g.,
216:
217:
218: int example[2][3] = {
219: 1, 2, 3, 4, 5, 6
220: };
221:
222:
223: or:
224:
225:
226: int example[2][3] = {
227: { 1, 2, 3 }, { 4, 5, 6 }
228: };
229:
230:
231: The situation becomes more difficult when an array is only parti-
232: ally initialized; e.g.,
233:
234:
235: int example[2][3] = {
236: { 1 }, { 2, 3 }
237: };
238:
239:
240: which is equivalent to:
241:
242:
243: int example[2][3] = {
244: { 1, 0, 0 }, { 2, 3, 0 }
245: };
246:
247:
248: As can be seen, braces mark the end of initialization for a
249: ``cluster'' of elements within an array. For example, the
250: following:
251:
252:
253: int example[2][3][4] = {
254: 5, { 1, 2 }, { 5, 2, 4, 3 }, { 9, 9, 5 },
255: { 2, 3, 7 } };
256:
257:
258: is equivalent to entering:
259:
260:
261:
262: COHERENT Lexicon Page 4
263:
264:
265:
266:
267: initialization Definition initialization
268:
269:
270:
271:
272: int example[2][3][4] = {
273: { 5, 0, 0, 0 },
274: { 1, 2, 0, 0 },
275: { 5, 2, 4, 3 },
276:
277: { 9, 9, 5, 0 },
278: { 2, 3, 7, 0 },
279: { 0, 0, 0, 0 }
280: };
281:
282:
283: The braces end the initialization of one cluster of elements; the
284: next cluster is then initialized. Any elements within a cluster
285: that have not yet been initialized when the brace is read are in-
286: itialized in the default manner.
287:
288: ***** See Also *****
289:
290: array, definitions, struct, union
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328: COHERENT Lexicon Page 5
329:
330:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.