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,一经查实,立即删除!

相关文章

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

近日上海晋名又有一台室外气瓶暂存柜项目通过验收&#xff0c;此次项目主要用于石墨烯材料行业气瓶的室外暂存。 用户单位创立于2017年&#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: 登…

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跳…

比亚迪:从低谷中涅槃,内功造就辉煌

修炼内功才能绽放光芒吗? 比亚迪用自己的奋斗史证明~ 只有经历低谷的洗礼&#xff0c;才能铸就属于自己的辉煌。 比亚迪这家公司的发展历程可谓是一部从战略转型到今天这个行业翘楚的奋斗史&#xff0c;真是跌宕起伏令人唏嘘。早期比亚迪从一个传统企业转型到汽车行业&#xf…

电源模块常见温升测试方法分享 -纳米软件

温升测试是电器产品安规测试项目之一&#xff0c;是为了检测电器产品及部件的温度变化情况&#xff0c;判断是否符合要求。在设备运行过程中会释放一定的热量&#xff0c;如果内部温度过高会影响产品的性能和稳定性&#xff0c;导致绝缘性能下降&#xff0c;因此温升测试是确保…

sshpass 命令exit code 6 问题解决方法

近期在使用sshpass做自动化交互的脚本&#xff0c;结果运行命令后会返回错误码6,命令如下&#xff1a; sshpass -p 123456 ssh test192.168.1.100 "uname -a" 经搜索资料发现&#xff0c;错误码6指的是Host public key is unknown&#xff0c;也就是说要访问的地址是…

股东分红模式玩法解析!

股东分红模式股东分红模式是指公司通过向股东支付现金或股票的方式&#xff0c;将公司利润分配给股东的一种方式。不同的股东分红模式有着不同的特点和应用场景。 ​一、模式概述 一个私域电商平台&#xff0c;非常重要的一个角色是“团队长”&#xff0c;尤其是能够带动业绩和…

MoE模型性能还能更上一层楼?一次QLoRA微调实践

Fine-Tuning Mixtral 8x7B with QLoRA&#xff1a;Enhancing Model Performance &#x1f680; 编者按&#xff1a;最近&#xff0c;混合专家(Mixture of Experts,MoE)这种模型设计策略展现出了卓越的语言理解能力&#xff0c;如何在此基础上进一步提升 MoE 模型的性能成为业界…

Win10子系统Ubuntu实战(二)

在 Windows 10 中安装 Ubuntu 子系统&#xff08;Windows Subsystem for Linux&#xff0c;简称 WSL&#xff09;有几个主要的用途和好处&#xff1a;Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言&#xff0c;WSL 提供了一种将 Windows 和 Linux…