C language indefinite array and initialization methods
- 2020-06-07 04:56:57
- OfStack
The C language does not support an indefinite array, either malloc or dynamically specifying its length
Dynamic array cannot be initialized, memset can be used
1.int* p = (int*)malloc(num);
2.int num = 5;
arr[num];
If arr[] is used, it needs to be initialized with the back alignment to specify the length, otherwise the compilation will pass, but by default there is only 1 unit, and more than 1 unit may be washed out later in the program
int arr[] = {0} ; // Defines the 1 An array of 20 units, not an indefinite array
It is better not to use arr[] = {0} to define an array. You should specify the length before defining an array
int arr[256] = {0};
int a [256] = {0}; Instead of initializing all elements of a to 0, int a[256]={1}; Nor do you initialize all elements of a to 1.
An array can be initialized with a column value, for example
int v1[] ={1,2,3,4};
char v2[]={'a','b','c',0};
When an array is defined without specifying a size, and when initialized with a list, the size of the array is determined by the number of list elements at initialization time. Therefore, v1 and v2 are of type int[4] and char[4], respectively. If the array size is explicitly specified, an error occurs when the number of elements specified at initialization time exceeds this size. Such as:
char v3[2] ={'a','b',0}; // Error: Too many initializations
char v3[3] ={'a','b',0}; // correct
If the number of elements specified at initialization time is less than the array size, the remaining elements are initialized back to 0.
For example,
int v5[8]={1,2,3,4};
Is equivalent to
int v5[8]={1,2,3,4,0,0,0,0};
Note that there is no array assignment in the form of:
void f()
{
v4={'c','d',0}; // Error: not an array assignment
}
As the name implies, a collection (aggregate) is a collection of several things at a time. This definition includes a collection of mixed types: for example, struct and class, an array is a collection of a single type.
While initialization of a collection is often verbose and error-prone, in C++ (aggregate initialization) it becomes convenient and secure. When a collection object is generated, all you have to do is specify the initialization value, and then the compiler does the initialization. This specification can be done in several different styles, depending on the collection type being processed. In either case, the specified initial value is enclosed in braces.
For example, an array of an internal type can be defined as follows:
int a[5] = { 1, 2, 3, 4, 5 } ;
If the number of initialization values given is greater than the number of array elements, the compiler gives an error message. But what if the number of initializations given is less than the number of data elements?
Such as:
int b[6] = {0};
At this point, the compiler assigns the first initialization value to the first element of the array, and then 0 to the rest of the elements. Note that the compiler does not do the initialization if an array is defined without an initial value of 1 column. So the above expression is a neat way to initialize 1 array to zero.