数组-C语言(初阶)

news2025/4/9 1:25:14

目录

一、一维数组的创建和初始化

        1.1 数组的创建

        1.2 数组的初始化

        1.3 一维数组的使用

二、二维数组的创建和初始化

        2.1 二维数组的创建

        2.2 二维数组的初始化

        2.3 二维数组的使用

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

三、数组越界 

四、数组作为函数参数

         4.1 数组名

        4.2 冒泡排序函数


一、一维数组的创建和初始化

        1.1 数组的创建

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

type_t arr_name [const_n];

       type_t 指数组的元素类型,arr_name数组名,const_n 是一个常量表达式,用来指定数组的大小。

        示例

int arr1[10];
 

int count = 10;
int arr2[count];

        注意:数组创建,在C99标准之前, [ ] 中要给一个常量才可以,不能使用变量;C99标准支持变长数组,数组大小可以使用变量确定,但不能初始化

        1.2 数组的初始化

        数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值。

        示例

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'};

        数组在创建的时候若想不指定数组确定的大小就得初始化,数组的元素个数根据初始化的内容来确定

        1.3 一维数组的使用

        操作符: [] ,下标引用操作符。它就是数组访问的操作符,数组下标从0开始,数组大小可以通过计算得到。
 

int main()
{
    int arr[10] = { 0 };//数组不完全初始化
    //计算数组元素个数
    int sz = sizeof(arr) / sizeof(arr[0]);
    //对数组内容赋值,使用下标来访问的,下标从0开始
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        arr[i] = i;
    }
    for (i = 0; i < 10; ++i)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

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

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

        

         由结果可以看出,数组在内存中是连续存放的,下标从0到9,地址依次从低地址到高地址

二、二维数组的创建和初始化

        2.1 二维数组的创建

        int arr[3][4];

        char arr[3][5];
        double arr[2][4];

        2.2 二维数组的初始化

        int arr[3][4] = {1,2,3,4};
        int arr[3][4] = {{1,2},{4,5}};
        int arr[][4] = {{2,3},{4,5}};   //二维数组有初始化,行可以省略,列不能省略

        2.3 二维数组的使用

        使用二维数组也是通过下标的方式。

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 二维数组在内存中的存储

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

        

         由结果可知,二维数组也是连续存放的。

三、数组越界 

        数组下标是有范围限制。数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,数组的下标如果小于0,或者大于n-1,就说数组越界访问。

四、数组作为函数参数

        我们在写代码的时候,会将数组作为参数传给一个函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数。

         4.1 数组名

int main()
{
        int arr[10] = {1,2,3,4,5};
        printf("%p\n", arr);
        printf("%p\n", &arr[0]);
        printf("%d\n", *arr);
        return 0;
}

        

         由此可知:数组名是首元素地址,但有两个例外:

        1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数

        2.&数组名,取出的是数组的地址,数组名表示整个数组

        4.2 冒泡排序函数

        当数组传参的时候,实际上只是把数组的首元素的地址传递过去,即使在函数参数部分写成数组的形式: int arr[] 表示的依然是一个指针: int *arr,函数内部的 sizeof(arr) 结果是首元素的大小即4。

void bubble_sort(int arr[], int sz)//参数接收数组元素个数
{
    for (int i = 0; i < sz - 1; i++)
    {
        for (int 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 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

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

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

相关文章

FreeRTOS 查找最高优先级的就绪任务源码分析

一、就绪任务列表 就绪列表 pxReadyTasksLists[ configMAX_PRIORITIES ] 是一个数组&#xff0c; 数组里面存的是就绪任务的 TCB&#xff08;准确来说是 TCB 里面的 xStateListItem 节点&#xff09; &#xff0c;数组的下标对应任务的优先级&#xff0c;优先级越低对应的数组…

Android studio 点击按钮 (跳转界面)

Android studio 点击按钮 &#xff08;跳转界面&#xff09; 问题描述 首先&#xff0c;我们有两个Java文件和与之绑定的xml文件。此处以HistoryActivity.java&#xff0c;activity_history.xml 和 EventDetail.java&#xff0c;activity_event_detail.xml为例子。我们要实现…

05-Numpy基础-用于数组的文件输入输出

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下&#xff0c;数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的&#xff1a; 如果文件路径末尾没有扩展名.npy&#xff0c;则该扩展名会被自动加上。然后就可以通过np.load读取磁盘上的数组&#xff1…

NAT网关

NAT网关 NAT网关(NAT Gateway)是一种网络地址转换服务&#xff0c;提供NAT代理(SNAT和DNAT)能力。阿里云NAT网关分为公网NAT网关和VPC NAT网关&#xff1a; ■ 公网NAT网关提供公网地址转换服务 ■ VPC NAT网关提供私网地址转换服务 公网NAT网关 公网NAT网关是一款针对公网访…

Matlab分割彩色图像

彩色图像 彩色图像除有亮度信息外&#xff0c;还包含有颜色信息。以最常见的RGB&#xff08;红绿蓝&#xff09;彩色空间为例来简要说明彩色图像&#xff1a; 彩色图像可按照颜色的数目来划分。例如&#xff0c;256色图像和真彩色图像&#xff08;2的16次方&#xff1d;21677…

解决Android Studio中Plugin version和Gradle version不匹配的问题

生命中最艰难的那段路是要自己一个人走过来的&#xff0c;这样&#xff0c;学到更多的是坚强&#xff0c;而不是感动。 《红猪》 前言 导入一个百度云的Demo而已&#xff0c;居然遇到这么多问题&#xff0c;纠结了很久&#xff0c;也查了很多资料&#xff0c;弯弯绕绕了好多路…

Ae 效果:CC Light Wipe

过渡/CC Light Wipe Transition/CC Light Wipe CC Light Wipe&#xff08;CC 光线擦除&#xff09;可以为图层添加指定形状&#xff08;圆形、门形和方形&#xff09;的光效&#xff0c;并通过光效形状的开合来实现擦除过渡。 可以为要过渡到的图层添加“曝光度”等效果&#x…

记Flask-Migrate迁移数据库失败的两个Bug——详解循环导入问题

文章目录 Flask-Migrate迁移数据库失败的两个Bug1、找不到数据库&#xff1a;Unknown database ***2、迁移后没有效果&#xff1a;No changes in schema detected. Flask-Migrate迁移数据库失败的两个Bug 1、找不到数据库&#xff1a;Unknown database ‘***’ 若还没有创建数…

有哪些前端调试和测试工具? - 易智编译EaseEditing

前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题&#xff0c;确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具&#xff1a; 调试工具&#xff1a; 浏览器开发者工具&#xff1a; 现代浏览器&#xff08;如Chrome、Firefox、Safari等&#…

Kali个人初始配置

1、修改root密码 sudo passwd root 2、kali换国内源 vim /etc/apt/sources.list&#xff0c;注释掉默认的官方源 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib# …

JavaScript箭头函数

Arrow Functions&#xff08;箭头函数&#xff09;是 ES6 中引入的一种新的函数表达式语法&#xff0c;它可以更简洁地定义函数&#xff0c;并且不需要像普通函数一样使用 function 关键字。 例如我们上节课的代码&#xff1a; const peopleAge function calcAge1(birthYear)…

idea新建Java-maven项目时,出现Dependency‘xxx(jar包名)‘ not found的解决方案

项目场景&#xff1a; 项目场景&#xff1a;使用idea创建maven项目时&#xff0c;导入简单依赖时&#xff08;本文以mysql-connector-java为例&#xff09;。 问题描述 问题&#xff1a; 首先&#xff0c;在创建新的maven项目中&#xff0c;出现下列两种情况&#xff1a; &am…

读SQL学习指南(第3版)笔记05_过滤

1. 不需要考虑排除任何列 1.1. 清除数据表中所有的内容 1.2. 暂存新数据仓库的数据 1.3. 向数据表中新添一列后 1.4. 修改数据表中的所有行 1.5. 检索消息队列表中的所有行 2. where子句 2.1. 可以在其中指定一个或多个过滤条件&#xff0c;用于限制SQL语句处理的行数 …

Session 认证机制

什么是 Cookie Cookie 是存储在用户浏览器中的一段不超过 4 KB 的字符串。它由一个名称(Name)、一个值(Value) 和其它几个用于控制 Cookie 有效期、安全性、使用范围的可选属性组成。 不同域名下的 Cookie 各自独立&#xff0c;每当客户端发起请求时&#xff0c;会自动把当前…

destoon8.0自媒体类型综合资讯门户模板

随着时代发展&#xff0c;自媒体资讯适合当前的互联网情形。呕心沥血开发的一套自媒体综合门户网站模板&#xff0c;本模板采用纯手写开发&#xff0c;带会员中心。首页&#xff0c;列表页&#xff0c;内容页&#xff0c;搜索页面精心编写&#xff0c;非常大气&#xff0c;并配…

【stable-diffusion使用扩展+插件和模型资源(下)】

插件模型魔法图片等资源&#xff1a;https://tianfeng.space/1240.html 书接上文&#xff1a;&#xff08;上&#xff09; 插件推荐 1.lobe theme lobe theme是一款主题插件&#xff0c;直接可以在扩展安装 界面进行了重新布局&#xff0c;做了一些优化&#xff0c;有兴趣的…

电商格局大变,刘强东再出重拳力挽狂澜,能挽回用户的心么?

近日中国第三大电商京东宣布将降低免邮门槛&#xff0c;plus用户全年免邮&#xff0c;普通用户免邮门槛从99元降低至59元&#xff0c;显示出创始人刘强东回归后再出重拳&#xff0c;如此做的原因在于国内的电商格局已发生重大变化。 国内的电商格局早已从阿里、京东两强&#x…

webscoket在vue中的使用

项目场景&#xff1a; 提示&#xff1a;项目相关背景&#xff1a; 什么是webscoket&#xff1f;: WebSocket是一种计算机通信协议&#xff0c;通过单个TCP连接提供全双工通信信道。实现了web客户端和服务器之间的实时通信&#xff0c;与传统的HTTP连接相比&#xff0c;允许以…

【洛谷】P1873 [COCI2011-2012#5] EKO / 砍树

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1873 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二分答案。 3. 代码实现 #include<bits/stdc.h> using namespace std; #define ll long long const int N 1e6 10; int a[N], …

日本核污水排放入海,海洋污染问题再引关注

2023年8月22日&#xff0c;日本政府举行相关阁僚会议后宣布&#xff0c;将从8月24日启动福岛核污染水排海。根据计划&#xff0c;福岛核污染水的排海至少要持续30年。此消息一出&#xff0c;引发国际社会和广大民众的强烈谴责。 福岛第一核电站的核污水含有多种放射性物质。其中…