catalogue
2, Creation and initialization of one-dimensional array
Creation of one-dimensional array
Omit initialization of array length
Initialization of character array
3, Use of one-dimensional arrays
4, Storage of one-dimensional array in memory
5, Creation and initialization of two-dimensional array
Creation of two-dimensional array
Initialization of two-dimensional array
7, Storage of two-dimensional array in memory
8, Array as an argument to a function
1, What is an array?
An array is a collection of elements of the same type, which are stored continuously in memory
Array is not the patent of C language. Java, C + +, c#, JavaScript, PHP and other programming languages also have arrays
C language array belongs to construction data type. An array can be decomposed into multiple array elements, which can be basic data types or construction types. Therefore, according to different types of array elements, arrays can be divided into numerical arrays, character arrays, pointer arrays, structure arrays and other categories.
In front ❤️ Organize 20000 words to take you into C language (detailed explanation + code demonstration + illustration) ❤️ (highly recommended collection!!!) This article has introduced the basic usage of arrays. Through this article, we will directly introduce arrays in an all-round way and take C language to a higher level
2, Creation and initialization of one-dimensional array
Creation of one-dimensional array
Creation method
type_t arr_name[const_n]; //type_t is the element type of the index group //const_n is a constant expression that specifies the size of the array
Note that here const_ The position of N must be a constant expression and cannot be a variable
You can experience it through the following code
Code 1:
int main() { int array[10]; }
This code creates an array such as array. The array name is array, the number of array elements is 10, and the array element type is int
Code 2 (error demonstration):
int main() { int count = 10; int arr2[count]; }
Operation results
Why?
This is because you cannot use variables to specify the size of an array when creating an array
Code 3:
char arr3[10]; float arr4[1]; double arr5[20];
This code is creating character array arr3,float type array and double type array respectively
initialization
The initialization of an array means that some reasonable initial values (initialization) are given to the contents of the array while creating the array
We just created an integer array in code 1, but there is nothing in the array. Now we can initialize it
Incomplete initialization
int main() { //Create an array and initialize int arr[10] = { 1,2,3,4,5 }; //Incomplete initialization. The remaining elements default to 0 int arr2[10] = {1,2,3,4,5,6,7,8,9,10}; //Full initialization int arr3[10] = {0}; int arr4[] = {1,2,3,4}; }
This arr array can hold 10 elements, but we only put the 5 elements of 1, 2, 3, 4 and 5 during initialization. The position of the remaining 5 elements is 0 by default. We can take a look through the monitor
You can see that the inches in the array arr are 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0
Full initialization
Code 1:
int main() { //Create an array and initialize int arr2[10] = {1,2,3,4,5,6,7,8,9,10}; //Full initialization }
Then look at the elements in the arr2 array in the monitor
Code 2
int main() { //Create an array and initialize int arr3[10] = {0}; }
Omit initialization of array length
int main() { //Create an array and initialize int arr4[] = {1,2,3,4}; }
The array arr4 is initialized without specifying the length of the array. It is often used in daily code. Although the array length is not written in [], you initialize several elements. The length of the array is certain. If you initialize four elements later, it is equivalent to 4 in []. It is the same when you write and not write
However, it should be noted that the writing method of arr4 must be initialized at the time of creation, otherwise it is wrong. The compiler cannot calculate the length of the array
Error demonstration
int main() { int arr4[]; }
Initialization of character array
int main() { int ch1[] = "abcde"; int ch2[] = { 'a','b','c','d','e' }; int ch3[3] = {'a','b','33'}; }
These two initialization methods will be used. ch1 is written in the form of a string, while ch2 is directly a single character. What is the difference between the two initialization methods?
ch1 is initialized with a string, and there must be '\ 0' as the end flag
ch2 is followed by a single character without '\ 0
Monitor observation:
We can further understand it through the following question:
#include <stdio.h> int main() { char ch1[] = "abcde"; char ch2[] = { 'a','b','c','d','e' }; printf("%d\n", sizeof(ch1)); printf("%d\n", sizeof(ch2)); printf("%d\n", strlen(ch1)); printf("%d\n", strlen(ch2)); return 0; }
Let's first think about the execution result of this code?
analysis:
Ch1 and ch2 are arrays of character types, and each element occupies one byte. In ch1, a string is stored, with 5 characters and '\ 0', so the value of sizeof(ch1) should be 6, the value of strlen(ch1) should be 5, the value of sizeof(ch2) should be 5, and there is no end flag '\ 0' after ch2, so strlen(ch2) should be a random value
Operation results:
Here 21 is a random value
3, Use of one-dimensional arrays
For the use of arrays, we introduced an operator: [], the subscript reference operator. It's actually an array access operator
Calculation of array length
Here is a method to calculate the number of array elements (array length)
Array length = = total array size / array element size
#include <stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); printf("%d\n", sz); }
Operation results:
Subscript of array
We usually access the array by subscript. It should be noted that the subscript of the array does not start from 1, but from 0. Each element in the array corresponds to a subscript
Through the following code, let's experience how to use an array (print the elements of the array)
#include <stdio.h> int main() { int i = 0; int arr[] = { 0 }; int sz = sizeof(arr) / sizeof(arr[0]); //Print elements of an array for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }
Operation results:
4, Storage of one-dimensional array in memory
How are one-dimensional arrays stored in memory? We can print out the address of each element in the array, as shown in the following code:
#include <stdio.h> int main() { int i = 0; int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); //Print the element address of the array for (i = 0; i < sz; i++) { printf("%p ", &arr[i]); } return 0; }
Operation results:
analysis:
The size of each element of the integer array is 4 bytes. We can see from the running results that each address has a difference of 4. Therefore, we can know that the elements of the array are stored continuously in memory, and the address also increases from low to high with the increase of the array subscript
5, Creation and initialization of two-dimensional array
Creation of two-dimensional array
//Array creation int arr1[3][4];
arr1 array is an array named arr1. Each element in the array is an integer, as shown in the following figure: a two-dimensional array with three rows and four columns
Initialization of two-dimensional array
Incomplete initialization
The code is as follows
int main() { int arr[3][4] = { 1,2,3,4,5 }; //Incomplete initialization }
This array has 3 rows and 4 columns. It can store 12 elements, but only 4 are initialized. The other elements will be initialized to 0 by default. We can take a look through the monitor
Branch initialization
What if you want to put 1 and 2 on the first line, 3 and 4 on the second line, and 5 on the third line? The following code:
int main() { int arr[3][4] = { { 1,2 },{ 3,4 },{ 5 } }; //Incomplete initialization }
Monitor observation:
Omit row initialization
int main() { int arr[][4] = { { 1,2 },{ 3,4 },{ 5 } }; //Incomplete initialization }
There is no problem in omitting the number of rows 3 directly here, but it should be noted that the number of columns must not be omitted
Monitor observation:
6, Use of arrays
First, let's look at the two-dimensional array above
The following code (prints each element in the array):
int main() { int arr[][4] = { { 1,2 },{ 3,4 },{ 5 } }; int i = 0; //that 's ok int j = 0; //column for (i = 0; i < 3; i++) //Control line { for (j = 0; j < 4; j++) //Control column { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
Operation results
7, Storage of two-dimensional array in memory
We saw that a one bit array is stored continuously in memory. What about a two-dimensional array?
Let's print out the address of each element of the array
#include <stdio.h> int main() { int arr[][4] = { { 1,2 },{ 3,4 },{ 5 } }; int i = 0; //that 's ok int j = 0; //column for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { printf("%p\n", &arr[i][j]); } } return 0; }
Operation results
The size of each element of the integer two-dimensional array is also 4. It can be seen that the address of each element of the two-dimensional array is continuous, and the two-dimensional array is also stored continuously in memory
Therefore, although our two-dimensional number group diagram is drawn with 3 rows and 4 columns, it is only for ease of understanding. We should know that its real storage in memory is still continuous, as shown in the following figure
We can understand the above two-dimensional array as three one-dimensional arrays, and the array names of the three one-dimensional arrays are: arr1[0], arr1[1], arr1[2]
8, Array as an argument to a function
What is the array name
The array name is actually the address of the first element of the array
We can take a look at it through the following code:
#include <stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; printf("%d\n", *arr); printf("%p\n", arr); printf("%p\n", &arr[0]); return 0; }
Operation results:
analysis:
It can be seen that by dereferencing the array name, the first element of the array is printed, and the result of directly printing the array name is the same as that of printing the address of the first element of the array, which shows that the array name is the address of the first element of the array
2 exceptions
- Sizeof (array name) -- the array name here represents the entire array
- &Array name ---- it also represents the whole array, and the address of the whole array is taken out
Case: bubble sorting
Now we have an array, and we want to sort its elements
Run sort
analysis
Here, a dynamic graph on the Internet is used to clearly show the core idea of bubble sorting
This figure clearly shows the bubble sorting method. Each bubble sorting is traversed from front to back. Adjacent elements are compared, and those that do not meet the conditions are exchanged. If there are 10 elements in the array, 9 bubble sorting is required, and 10-1-times pairs of elements are compared each time
Bubble sort per trip
A total of 10 elements require 9
code implementation
#include <stdio.h> void bubble_sort(int arr[],int sz) { int i = 0; //Used to indicate the number of bubbling trips for (i = 0; i < sz - 1; i++) { int j = 0; //Subscript used to represent an array for (j = 0; j < sz - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } void print_arr(int arr[], int sz) //Define this function to print the array { int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } } int main() { int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; int sz = sizeof(arr) / sizeof(arr[0]); //Calculate the number of array elements bubble_sort(arr, sz); print_arr(arr, sz); return 0; }
--------------------------------------------------------------------------------
-------------------------Partial completion of C language array-----------------------------
About C language, each knowledge point will be introduced in more detail in a separate blog
Welcome to pay attention!!!
Learn and communicate together!!!
Let's finish the programming!!!
--------------It's not easy to organize. Please support the third company------------------