0
点赞
收藏
分享

微信扫一扫

C语言学习之旅 【数组】

Java旺 2022-08-02 阅读 182

数组

1.数组是什么

  • 数组是

    一组数
    一组相同类型元素的集合

    1.1 创建方式

    ```c++
    type_t arr_name [const_n]
    //type 指的是数组的元素类型
    //const_n 指的是一个常量表达式,用来指定数组的大小

    ### 1.2 数组的初始化
    ```c++
    int main()
    {
    //整数初始化
    int a = 0; \\ 初始化
    int arr1[5] = {1,2,3,4,5}; \\完全初始化 -- 等价于 arr[] = {1,2,3,4,5}
    int arr2[5] = {1,2}; \\不完全初始化
    //字符初始化
    char arr5[5] = {'1', '2', '3'}; \\ 1 2 3 \0
    char arr6[] = {'1', '2', '3'};
    char arr7[5] = "123";
    char arr8[] = "123";
    return 0;
    }

1.3 对于字符数组的不同写法的内存分配问题

```c++
char arr1[] = "bit";
\ 内存中存放 b i t \0 从b开始,到\0停止
char arr2[] = {'b', 'i', 't'};
\内存中存放b i t 从b开始,直到遇到\0才停止


### 1.4 地址的打印 -- 十六进制的打印
```c++
int main()
{
printf("%x\n", 0x12);
printf("%p\n", 0x12); //0000 0012 -->八位十六进制,1位十六进制表示4位2进制,8个即代表 8*4 =32 个,代表了内存中的地址
return 0;
}

1.5 一维数组的存储

一维数组在内存中是连续存放的
随着数组下标的增长,地址是由低到高变化的

```c++
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = 0;
sz = sizeof(arr) / sizeof(arr[0]);
for (i=0; i < sz; i++)
{
printf("arr[%d] : %p\n", i, &arr);
}
return 0;
}

![](%E6%95%B0%E7%BB%84%EF%BC%88%E4%B8%80%EF%BC%89_md_files/3d7ac9b0-114b-11ed-a5a9-b3b499c87ff8.jpeg?v=1&type=image)

## 2. 二维数组
### 2.1 二维数组的创建
二维数组的初始化时 行可以省略,列不可以省略
```c++
int main()
{
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; // 三行四列的数组 --初始化
int arr[3][4] = {{1, 2}, {3, 4}};
int arr[][4] = {{2, 3}, {4, 5}};
return 0;
}

2.2 二维数组的使用

```c++
int main()
{
int arr[][4] = {{1,2},{3,4},{5,6}}
int i = 0;
int j = 0;
for(i = 0; i < 3; i++)
{
for(j = 0; j <3; j++)
{
printf("%d", arr[i][j]);
}
}
return 0;
}

==二维数组的在内存中的存储是连续的==

### 2.3 数组作为函数参数
除了以下两种情况外,数组名就是首元素地址
> 1. sizeof(数组名) - 数组名表示整个数组 - 计算整个数组的大小单位一个字节
> 2. &数组名 - 数组名表示整个数组 - 取出的是整个数组的地址

* 实例 (冒泡排序)
```c++
void bubble_sort(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz-1; i++)
{
int j = 0;
int flag = 1;

for(j = 0; j<sz-1-i;j++)
{
if(arr[i]<arr[i+1])
{
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
flag = 0;
}
}
if(flag == 1)
{
break;
}
}
}

int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int i = 0;
int sz = 0;
sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz); //数组名就是首元素地址
return 0;
}
举报

相关推荐

0 条评论