当前位置:网站首页>C language - array
C language - array
2022-07-07 01:17:00 【Small protrusion ~】
Catalog
1. One dimensional array creation and initialization
1.2 Initialization of an array
edit 1.3 The use of one-dimensional arrays
1.4 One dimensional array storage in memory
2. The creation and initialization of two-dimensional array
2.1 The creation of two-dimensional array
2.2 Initialization of 2D array
2.3 The use of two-dimensional arrays
2.4 Two dimensional array storage in memory
4. Arrays as function arguments
4.1 Wrong design of bubble sort function
4.3 Correct design of bubble sorting function
1. One dimensional array creation and initialization
1.1 Array creation
An array is a collection of elements of the same type
How to create an array :
type_t arr_name [const_n];
//type_t Is the element type of the exponential group
//const_n Is a constant expression , Used to specify the size of an array
An instance created by an array :
notes :C99 The concept of variable length array is introduced in , Allow the size of the array to be specified by variables , If the compiler does not support C99 Variable length array in , Then you can't use .
1.2 Initialization of an array
The initialization of an array refers to , While creating an array, give the contents of the array some reasonable initial values ( initialization ).
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {'a',98, 'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
If you want to create an array without specifying the size of the array, you have to initialize it . The number of elements in the array is determined according to the contents of initialization .
But for the following code to distinguish , How to allocate in memory .
char arr1[] = "abc";
char arr2[3] = {'a','b','c'};
1.3 The use of one-dimensional arrays
about The use of arrays, we introduced an operator before : [ ] , Subscript reference operator . It's actually an array access operator
#include <stdio.h>
int main()
{
int arr[10] = {0};// Incomplete initialization of arrays
// Count the number of elements in an array
int sz = sizeof(arr)/sizeof(arr[0]);
// Assign values to the contents of the array , Arrays are accessed using subscripts , Subscript from 0 Start . therefore :
int i = 0;// Do subscripts
for(i=0; i<10; i++)// Write here 10, Ok or not ?
{
arr[i] = i;
}
// Output the contents of the array
for(i=0; i<10; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
Arrays are accessed using subscripts , The subscript is from 0 Start . The size of the array can be calculated .
1.4 One dimensional array storage in memory
int main
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
int* p = &arr[0];
for (i = 0; i < sz; i++)
{
printf("%d ", *(p + i));
}
printf("\n");
for (i = 0; i < sz; i++)
{
printf("&arr[%d] = %p <=======> %p\n", i, &arr[i], p + i);
}
return 0;
}
Watch the output carefully , We know , As the array subscript grows , Address of element , It's also increasing regularly .
So we can draw a conclusion : Arrays are continuously stored in memory .
2. The creation and initialization of two-dimensional array
2.1 The creation of two-dimensional array
// Array creation
int arr[3][4];
char arr[3][5];
double arr[2][4];
2.2 Initialization of 2D array
// Array initialization
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {
{1,2},{4,5}};
int arr[][4] = {
{2,3},{4,5}};// If the two-dimensional array is initialized , Lines can be omitted , Columns cannot be omitted
2.3 The use of two-dimensional arrays
Two dimensional arrays are also used by subscripts
#include <stdio.h>
int main()
{
int arr[3][4] = {0};
int i = 0;
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<4; j++)
{
arr[i][j] = i*4+j;}
}
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<4; j++)
{
printf("%d ", arr[i][j]);
}
}
return 0;
}
2.4 Two dimensional array storage in memory
Like a one-dimensional array , Here we try to print each element of a two-dimensional array .
int main()
{
int arr[][5] = { {1,2},{3,4},{5,6} };
int i = 0;
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
int j = 0;
for (j = 0; j < sizeof(arr[0]) / sizeof(arr[0][0]); j++)
{
printf("&arr[%d][%d] = %p\n",i,j ,&arr[i][j]);
}
}
return 0;
}
Through the results, we can analyze , In fact, two-dimensional arrays are also stored continuously in memory
3. An array
The subscript of an array is range limited .
The next stipulation of the array is from 0 At the beginning , If the array has n Elements , The subscript of the last element is n-1.
So if the subscript of the array is less than 0, Or greater than n-1, The array is accessed out of bounds , Access beyond the legal space of the array .
C The language itself does not check the bounds of array subscripts , The compiler does not necessarily report an error , But the compiler does not report an error , That doesn't mean the program is right ,
So when programmers write code , You'd better do cross-border inspection yourself .
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<=10; i++)
{
printf("%d\n", arr[i]);// When i be equal to 10 When , Cross border visit
}
return 0;
}
Rows and columns of two-dimensional arrays may also be out of bounds .
4. Arrays as function arguments
Often when we write code , Will pass the array as an argument to a function , such as : I want to implement a bubble sort ( Here is the idea of algorithm ) The function sorts an integer array .
4.1 Wrong design of bubble sort function
#include <stdio.h>
void bubble_sort(int arr[])
{
int sz = sizeof(arr)/sizeof(arr[0]);// Is that right ?
int i = 0;
for(i=0; i<sz-1; i++)
{
int j = 0;
for(j=0; j<sz-i-1; j++)
{
if(arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
int main()
{
int arr[] = {3,1,7,5,8,9,0,2,4,6};
bubble_sort(arr);// Whether it can be sorted normally ?
for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
return 0;
}
There is something wrong with this method , Let's find a problem , After debugging, you can see bubble_sort intra-function sz , yes 1.
When an array is used as a function parameter , Instead of passing the entire array ?
4.2 What is the array name ?
Yes 2 Exceptions :
1.sizeof( Array name ), The array name is not the address of the first element of the array , The array name represents the entire array , It calculates the size of the entire array .
2. & Array name , The array name is not the address of the first element of the array , The array name represents the entire array , It takes out the address of the entire array
In addition to this 1,2 Except for two cases , All array names represent the address of the first element of the array .
4.3 Correct design of bubble sorting function
#include <stdio.h>
// It's essentially a pointer void bubble_sort(int* arr)
void bubble_sort(int arr[],int sz)
{
//int sz = sizeof(arr) / sizeof(arr[0]);// It doesn't work out sz, Because only one pointer was passed .
int i = 0;
// Number of trips
for (i = 0; i < sz; i++)
{
int flag = 1;// The assumption is ascending
int j = 0;
for (j = 0; j <sz-1-i; j++)
{
// In exchange for
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;
}
if (1 == flag)
{
break;
}
}
}
}
int main()
{
int arr[] = {10,9,8,7,6,5,4,3,2,1};
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);
//int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
边栏推荐
- Gnet: notes on the use of a lightweight and high-performance go network framework
- 「精致店主理人」青年创业孵化营·首期顺德场圆满结束!
- Taro 小程序开启wxml代码压缩
- Informatics Olympiad YBT 1171: factors of large integers | 1.6 13: factors of large integers
- The MySQL database in Alibaba cloud was attacked, and finally the data was found
- Metauniverse urban legend 02: metaphor of the number one player
- [batch dos-cmd command - summary and summary] - view or modify file attributes (attrib), view and modify file association types (Assoc, ftype)
- UI控件Telerik UI for WinForms新主题——VS2022启发式主题
- MySQL script batch queries all tables containing specified field types in the database
- 第三方跳转网站 出现 405 Method Not Allowed
猜你喜欢
Force buckle 1037 Effective boomerang
Batch obtain the latitude coordinates of all administrative regions in China (to the county level)
windows安装mysql8(5分钟)
golang中的Mutex原理解析
ARM裸板调试之JTAG调试体验
Asset security issues or constraints on the development of the encryption industry, risk control + compliance has become the key to breaking the platform
Niuke cold training camp 6B (Freund has no green name level)
[Niuke] b-complete square
Telerik UI 2022 R2 SP1 Retail-Not Crack
boot - prometheus-push gateway 使用
随机推荐
Installation and testing of pyflink
如何管理分布式团队?
What are the differences between Oracle Linux and CentOS?
ClickHouse字段分组聚合、按照任意时间段粒度查询SQL
Neon Optimization: summary of performance optimization experience
MySQL script batch queries all tables containing specified field types in the database
Segmenttree
Cause of handler memory leak
【js】获取当前时间的前后n天或前后n个月(时分秒年月日都可)
Neon Optimization: About Cross access and reverse cross access
docker 方法安装mysql
[hfctf2020]babyupload session parsing engine
Build your own website (17)
Asset security issues or constraints on the development of the encryption industry, risk control + compliance has become the key to breaking the platform
Atomic in golang and CAS operations
让我们,从头到尾,通透网络I/O模型
Part V: STM32 system timer and general timer programming
2022 Google CTF SEGFAULT LABYRINTH wp
Metauniverse urban legend 02: metaphor of the number one player
Boot - Prometheus push gateway use