当前位置: 首页 > news >正文

04.【C语言学习笔记】数组

目录

1. 数组元素的类型 和 数组类型

1.1 数组元素的类型(常见类型)

1.2 数组的类型

2. 数组的初始化

3. 下标引用操作符 [ ]

4. 一维数组在内存中的存储

5. 计算数组元素个数 sizeof

6. 二维数组的初始化

6.1 不完全初始化

6.2 完全初始化

6.3 按照行初始化

6.4 初始化时省略行,但是不能省略列

7. 二维数组在内存中的存储(同一维数组)

8. 变长数组(C99)

9. Windows中的延时函数、清空cmd窗口的命令

10. 二分查找代码实现


1. 数组元素的类型 和 数组类型

1.1 数组元素的类型(常见类型)

type arr_name[常量值];

        type 指定的是数组中存放数据(元素)的类型,可以是: char、short、int、float 等,也可以自定义的类型

1.2 数组的类型

        数组是一种自定义类型,去掉数组名留下的就是数组的类型。

int arr1[10];
int arr2[12];
char ch[5];
arr1 数组的类型是int [10]
arr2 数组的类型是int[12]
ch   数组的类型是char [5]

2. 数组的初始化

        不完全初始化,剩下的元素默认初始化为0。

        如果数组初始化,[ ] 中可以不写元素个数

//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第一个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
char arr4[5] = {0};

3. 下标引用操作符 [ ]

        操作符[ ] ,这个操作符叫:下标引用操作符。

4. 一维数组在内存中的存储

        从输出的结果我们分析,数组随着下标的增长,地址是由小到大变化的,并且我们发现每两个相邻的元素之间相差4(因为一个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的。随着下标的增长,地址是由小(低)到大(高)变化的这就为后期我们使用指针访问数组奠定了基础。

5. 计算数组元素个数 sizeof

        以下获取数组元素个数代码

#include <stdio.h>
int main()
{int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);    // 获取数组元素个数printf("%d\n", sz);    return 0;
}

6. 二维数组的初始化

6.1 不完全初始化

int arr1[3][5] = { 1,2 };
int arr2[3][5] = { 0 };

6.2 完全初始化

int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 1 3,4,5,6,7};

6.3 按照行初始化

int arr4[3][5] = {{1,2},{3,4},{5,6}};

6.4 初始化时省略行,但是不能省略列

int arr5[][5] = {1,2,3};    // 1行
int arr6[][5] = {1,2,3,4,5,6,7};    // 2行
int arr7[][5] = {{1,2}, {3,4}, {5,6}};    // 3行

7. 二维数组在内存中的存储(同一维数组)

        每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以二维数组中的每个元素都是连续存放的

8. 变长数组(C99)

        C99中给一个变长数组(variable-length array,简称 VLA)的新特性,允许我们可以使用变量指定数组大小。请看下面的代码:

int n = a+b;
int arr[n];

        上面示例中,数组arr 就是变长数组,因为它的长度取决于变量n 的值,编译器没法事先确定,只有运行时才能知道n 是多少。

        变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化。它的好处是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的数组的大小一旦确定就不能再变化了

9. Windows中的延时函数、清空cmd窗口的命令

        要包含 Windows.h 头文件

        使用方法如下:

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <string.h>
#include <Windows.h>
int main()
{char arr1[] = "welcome come to bit!!!";char arr2[] = "**********************";int n = strlen(arr1);for (int l = 0, r = n - 1; l <= r; ++l, --r){arr2[l] = arr1[l];arr2[r] = arr1[r];printf("%s\n", arr2);Sleep(1000);	// windows的延时函数,要包含 Windows.h 头文件system("cls");	// windows的清空cmd窗口的命令,system函数,传"cls"字符串参数}return 0;
}

10. 二分查找代码实现

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int n = sizeof(arr) / sizeof(arr[0]);int key = 0;while(scanf("%d", &key) != EOF){int l = 0;int r = n - 1;int mid = (l + r) / 2;int flag = 0;while (l <= r){mid = (l + r) / 2;if (key > arr[mid])l = mid + 1;else if (key < arr[mid])r = mid - 1;else{flag = 1;printf("找到了!下标是%d\n", mid);break;}}if (flag == 0)printf("没找到\n");}return 0;
}

相关文章:

  • C++ 封装特性
  • Python 爬虫入门 Day 6 - 反爬虫应对策略 Headers / Cookies 模拟请求
  • Python词频统计工具全解析
  • FPGA基础 -- Verilog 表达式
  • 麒麟系统安装达梦数据库
  • 【git】git的基础使用一
  • C++---类和对象(中)
  • JSON与XML怎么选?什么情况下会用到 JSON?
  • 408第二季 - 组成原理 - 标志器和加法器
  • ES磁盘使用超限问题:TOO_MANY_REQUESTS disk usage exceeded flood-stage watermark,
  • 【Docker安装PostgreSQL】psql:致命错误: 用户 Password 认证失败
  • Android中Glide.with().load().into() 应付面试源码解析
  • C语言中errno错误码定义及使用
  • 绿色建筑发展新动能:楼宇自控助力实现高效节能减排
  • 2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
  • 【系统设计【4】】设计一个限流器:从理论到实践的完整解决方案
  • 【FreeRTOS实战】一章速通freertos含扩展MQTT,SD卡,
  • Java + Spring Boot + MyBatis 枚举变量传递给XML映射文件做判断
  • 6.17 note
  • 【AI News | 20250617】每日AI进展
  • 事业单位网站建设方案书/站长之家素材
  • 网站建设优化兼职在家/关键词推广效果分析
  • 成都网站搜索优化/杭州谷歌推广
  • 阜宁网站制作收费在线咨询/教你免费申请个人网站
  • wordpress增加知识共享协议/aso优化平台
  • php做学校网站免费下载/软文营销软文推广