C语言数组基础知识

目录

一维数组:

一维数组的创建:

一维数组的访问:

一维数组在内存中的存储:

二维数组:

二维数组的创建:

二维数组的初始化:

二维数组的使用:

二维数组在内存中的存储:

数组作为函数参数:

但是,数组名是首元素地址的情况有两个例外:

冒泡排序的实例应用:


一维数组:

一维数组的创建:

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

type_t arr_name[const_n];

type_t是指数组的元素类型

const_n是一个常量表达式(不能初始化变量n作为常量表达式,只有C99标准支持变长数组),用来指定数组的大小

int arr[10]={1,2,3,4,5,6,7,8,9,10};//完全初始化
int arr[10]={1,2,3,4,5};//不完全初始化,后面的值为0;
int arr[]={1,2,3,4,5};   //等价于 int arr[5]={1,2,3,4,5};  
char ch[]={'b','i','t'};//三个元素
char ch[]=“bit”;//四个元素,因为字符串末尾自带'\0'
int main() {char ch1[] = "bit";char ch2[] = { 'b','i','t' };printf("%s\n", ch1);printf("%s\n", ch2);return 0;
}

这段代码的运行结果为:

原因是字符串“bit”中有结束字符‘\0’.而ch2中没有结束字符导致继续读取随机值(这种情况下求字符串长度也会出错)


一维数组的访问:

(1)数组是使用下标来访问的,下标是从0开始的

(2)数组的大小可以通过计算得到

int sz = sizeof(arr) / sizeof(arr([0]));

一维数组在内存中的存储:

//%p - 是按地址的格式打印 - 十六进制的打印
int main() {int arr[10] = { 0 };for (int i = 0; i < 10; i++) {printf("arr[%d]=%p\n", i, &arr[i]);}return 0;
}

这段代码运行结果为:

所以:

(1)一位数组在内存中是连续存放的(所以可以用指针访问)

(2)随着数组下标的增长,地址是由低到高变化的


二维数组:

二维数组的创建:

int arr [3][4];
char arr[3][4];


二维数组的初始化:

int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//完全初始化

int arr[3][4] = { 1,2,3,4,5,6,7 };//不完全初始化

int arr[3][4] = { {1,2},{3,4},{5,6} };//每行填充两个元素
//因为初始化了三行,所以可以省略行数
//所以等价于int arr[][4] = { {1,2},{3,4},{5,6} };


二维数组的使用:

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,5,6,7 };//不完全初始化int arr[3][4] = { {1,2},{3,4},{5,6} };for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

运行结果为:


二维数组在内存中的存储:

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

运行结果为:

所以:

(1)二维数组在内存中也是连续存放的(行内部连续,跨行也是连续的)

如图:

(2)二维数组也可以定义指针访问


数组作为函数参数:

数组作为函数参数传入,传入的是数组首元素的地址,等价于指针

int main() {int arr[10] = { 0 };printf("%p\n", arr);printf("%p\n", &arr[0]);return 0;
}

运行结果为:

但是,数组名是首元素地址的情况有两个例外

(1)sizeof(数组名) 数组名表示整个数组-计算的是整个数组的大小,单位是字节

但在函数中接受传入的形参数组时,sizeof(形参数组)计算的是数组首地址元素的大小, 这一块具体可查看博主的相关博客C中关于能否在函数中求传入整型数组长度的问题

(2)&数组名 - 数组名表示整个数组 - 取出的是整个数组的地址(但与数组首元素地址一样,但意义不同),这一块具体可查看博主的相关博客C中数组名代表首元素地址的两个例外

冒泡排序的实例应用:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include<stdlib.h>
#include <stdbool.h> 
void bubble(int brr[], int len) {for (int i = 0; i < len - 1; i++) { //一共进行几趟冒泡排序bool flag = false;              //用于判断本趟冒泡排序是否发生了元素的交换for (int j = len - 1; j > i; j--) {//每趟冒泡排序要进行几次交换if (brr[j] > brr[j - 1]) {int tmp = brr[j - 1];brr[j - 1] = brr[j];brr[j] = tmp;             //交换元素flag = true;              //本趟排序发生了元素的交换}if (flag == false) {return;}}}
}
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);bubble(arr, sz);for (int i = 0; i < 10; i++) {printf("%d ", arr[i]);}return 0;
}

运行结果为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署Gitea服务的那些坑

目标&#xff1a;在win10系统上部署Gitea服务&#xff0c;以ssh协议的方式访问。 首先要在win10系统上安装ssh服务&#xff0c;这里安装OpenSSH即可&#xff0c;PowerShell脚本如下&#xff08;记住管理员运行&#xff09;&#xff1a; # 打开 PowerShell 以管理员身份运行 #…

为什么会有js?

JavaScript&#xff08;简称为JS&#xff09;是一种脚本语言&#xff0c;主要用于为网页添加交互性和动态效果。JS的出现主要有以下几个原因&#xff1a; 网页交互性的需求&#xff1a;早期的静态网页只能展示信息&#xff0c;无法与用户进行交互。随着互联网的发展&#xff0c…

上海晋名室外暂存柜助力石墨烯材料行业气瓶储存安全

近日上海晋名又有一台室外气瓶暂存柜项目通过验收&#xff0c;此次项目主要用于石墨烯材料行业气瓶的室外暂存。 用户单位创立于2017年&#xff0c;是一家从事石墨烯等新材料技术的科技型高新技术企业。 上海晋名作为一家专注工业安全防护领域&#xff0c;危险化学品安全储存…

JavaScript-内置对象-笔记

1.Math对象 Math对象&#xff1a; 用于进行数字处理 自带的对象 不是构造函数---不需要new 属性&#xff1a; Math.PI ----- 圆周率 方法&#xff1a; Math.floor(数字) ----- 向下取整 &#xff08;只要整数位&#xff09; Math.ceil(数字) ---- 向上取整&#xff08;不管小数…

web安全之XSS攻击原理及防范

XSS攻击原理 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的网络攻击方式。攻击者通过在受害者的浏览器中注入恶意脚本&#xff0c;来实现对受害者的会话劫持、敏感信息窃取等非法目的。但是在实际的项目开发中&#xff0c;除了少数企…

RocketMQ Dashboard可视化工具

RocketMQ Dashboard 将 RocketMQ的相关指标展示在web页面 &#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 官方文档地址&#xff1a;RocketMQ Dashboard | RocketMQ 目录 1.下载安装 1.1 系统要求&#xff1a; 1.2 源码安装 1.3 访问页面 2.功…

如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】

目录 前言 1. 使用Docker安装AFFINE 2. 安装cpolar内网穿透工具 3. 配置AFFINE公网访问地址 4. 实现公网远程访问AFFINE 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿…

借势API电商数据采集汇总分析

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

使用python读取yaml文件数据

使用python读取yaml文件&#xff1a; yaml文件数据&#xff1a;data.yaml login_data:url: http://www.baidu.comcase1:user1: password1: 12345errorText: 请输入用户名case2:user2: adminpassword2: errorText: 请输入密码case3:user3: adminpassword3: 123456errorText: 登…

ABAP CDS 笔记

文章目录 1.什么是abap cdsadap cds的优点 2.常用cds语法常用函数一 数值函数1.绝对值2. 最小整数不小于arg的值3.两个参数相除4.两个数相除切保留小数位5.最小整数不大于arg的值6.取除数的余数 二 字符串函数1.拼接字符2.替换字符3.截取字符串 三 常用的分支语句1.CASE 表达式…

19. 从零用Rust编写正反向代理, 配置数据的热更新原理及实现

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…

探索 Java 8 中的 Stream 流:构建流的多种方式

目录 前言 什么是 Stream 流&#xff1f; 创建 Stream 流 1. 从集合创建 Stream 2. 从数组创建 Stream 3. 使用 Stream.of 创建 Stream 4. 使用 Stream.generate 创建 Stream 5. 使用 Stream.iterate 创建 Stream Stream 流的操作 1. 过滤数据 2. 映射数据 …

01 ZigBee开发环境IAR搭建

链接&#xff1a;https://pan.baidu.com/s/18l8z9qajPBj2X5WzgjT0TA?pwd41qc 提取码&#xff1a;41qc 注意&#xff1a;安装包和注册机都要右击用管理员权限打开&#xff0c;安装过程中关闭杀毒软件&#xff08;否则后续程序不行&#xff09; 安装IAR-8051 以管理员身份运行E…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

行列式的计算

1、基本性质&#xff1a; 1&#xff09;行列式转置相等 2&#xff09;任意两行&#xff08;列&#xff09;成比例&#xff0c;行列式为0 3&#xff09;对换任意某两行&#xff08;列&#xff09;&#xff0c;行列式变号 4&#xff09;某一行&#xff08;列&#xff09;乘某…

Ubuntu下VsCode+CMake 交叉编译

参考连接&#xff1a; Ubuntu下VsCodeCMake 交叉编译 VSCode与CMake搭配使用之基本配置 VSCode与CMake搭配使用之交叉编译 step1: CtrlShiftp打开VSCode的指令面板&#xff0c;然后输入cmake:q ; 在窗口搜索&#xff1a;“ >CMake:Edit user-loacl CMake kits ”会打开一个…

SpringBoot集成阿里云短信实现发送短信验证码

SpringBoot集成阿里云短信实现发送短信验证码 一、准备工作1、注册账号2、申请资质3、申请签名4、创建模板 二、springboot集成发送短信1、引入依赖2、编写短信配置文件3、编写短信发送工具类 一、准备工作 在使用springboot集成短信服务之前&#xff0c;需要先注册阿里云的账…

VMware vSphere运维管理手册

适用版本:VMware vSphere 7.0 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 ![[Pasted image 20231212132…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

使用Markdown编辑器

使用Markdown编辑器 本Markdown编辑器使用[StackEdit][6]修改而来&#xff0c;用它写博客&#xff0c;将会带来全新的体验哦&#xff1a; Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的…