C语言数组详解

2023-05-16

目录

一、数组的概念

二、数组的分类

2.1 按元素的类型分类

2.2 按维数分类

三、数组的定义

3.1 一维数组的定义 格式:

3.2 二维数组的定义

四、定义并初始化

4.1 一维数组的初始化

4.2 二维数组的初始化

五、数组元素的引用方法

六、字符数组的定义和初始化问题


一、数组的概念

数组是若干个相同类型的变量在内存中有序存储的集合。

概念理解:

      数组用于存储一组数据

      数组里面存储的数据类型必须是相同的

      数组在内存中会开辟一块连续的空间

int a[10];//定义了一个整型的数组a,a是数组的名字,数组中有10个元素,每个元素的类型

都是int类型,而且在内存中连续存储。

这十个元素分别是a[0] a[1] …. a[9]

a[0]~a[9]在内存中连续的顺序存储

二、数组的分类

2.1 按元素的类型分类

1)字符数组

      即若干个字符变量的集合,数组中的每个元素都是字符型的变量

      char s[10]; s[0],s[1]....s[9];

2)短整型的数组

      short int a[10]; a[0] ,a[9]; a[0]=4;a[9]=8;

3)整型的数组

      int a[10]; a[0] a[9]; a[0]=3;a[0]=6;

4) 长整型的数组

      lont int a[5];

5)浮点型的数组(单、双)

      float a[6]; a[4]=3.14f;

      double a[8]; a[7]=3.115926;

6)指针数组

      char *a[10]

      int *a[10];

7)结构体数组

      struct stu boy[10];

2.2 按维数分类

一维数组

      int a[30];

      类似于一排平房

二维数组

      int a[2][30];

      可以看成一栋楼房 有多层,每层有多个房间,也类似于数学中的矩阵

      二维数组可以看成由多个一维数组构成的。 有行,有列,

多维数组

      int a[4][2][10];

      三维数组是由多个相同的二维数组构成的

      int a[5][4][2][10];

三、数组的定义

3.1 一维数组的定义 格式:

      数据类型 数组名[数组元素个数];

例如:

      int a[10]; //定义了一个名为a的数组,数组中每一个元素都是int类型,一共有10个元素

      //每一个元素都保存在一个变量中,每一个变量都是有数组名和数组下标组成的

      //并且是从0开始的,分别是a[0] a[1] a[2]... a[9]

注意:数组元素的个数在定义的时候也可以不写,但是如果不写,必须初始化(定义的时候赋值)

#include <stdio.h>

int main(int argc, char *argv[])
{
    //定义一个一维数组
    int a[10];
    //通过sizeof关键字可以获取数组的大小
    printf("sizeof(a) = %d %d\n", sizeof(a), 10 * sizeof(int));

    //如果定义数组的同时赋值(初始化),可以不指定数组元素的个数,系统会根据初始化元素的个数自动指定数组元素的个数
    int b[] = {10, 20, 30};
    printf("sizeof(b) = %d\n", sizeof(b));

    printf("***************************\n");

    return 0;
}

3.2 二维数组的定义

格式:

      数据类型 数组名[行的个数][列的个数];

例如:

      int a[2][4];

解释:

      定义一个名为a的二维数组,每一个元素都是int类型 这个二维数组中包含两行四列的元素,一共有8个元素 二维数组也是连续开辟空间,访问元素是行和列都是从 0开始,分别是a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3]

注意:二维数组的下标也是可以省略的,但是有条件,在初始化时行数可以省略,但是列数 不能省略。

    //定义一个二维数组
    int c[2][4];
    printf("sizeof(c) = %d %d\n", sizeof(c), 2 * 4 * sizeof(int));

    //二维数组的行数可以省略,但是列数不能省略,在初始化时可以这样操作
    //系统会根据列数自动指定行数,最终得到的函数所得到得元素个数移动是列的整数倍
    int d[][4] = {1, 2, 3, 4, 5};
    printf("sizeof(d) = %d\n", sizeof(d));

四、定义并初始化

4.1 一维数组的初始化

#include <stdio.h>

int main(int argc, char *argv[])
{
    //以一维数组的初始化
    //如果不初始化,直接使用会是随机值
    //int a[4];

    //初始化方式1:全部初始化
    //int a[4] = {123, 78, 666, 476};
    //如果是全部 初始化,可以不指定数组元素的个数,系统会自动分配
    //int a[] = {10, 20, 30, 40};

    //初始化方式2:局部初始化
    //未初始化的位置的元素自动赋值为0
    int a[4] = {10, 20};

    printf("%d\n", a[0]);
    printf("%d\n", a[1]);
    printf("%d\n", a[2]);
    printf("%d\n", a[3]);

    return 0;
}

4.2 二维数组的初始化

按行初始化:

      a、全部初始化

             int a[2][2]={{1,2},{4,5}};

             a[0][0] =1; a[0][1] = 2; a[1][0] = 4,a[1][1]=5;

      b、部分初始化

            int a[3][3]={{1,2},{1}};

            a[0][0] = 1;a[0][2] =0;

逐个初始化:

      全部初始化:

            int a [2][3]={2,5,4,2,3,4};

      部分初始化:

            int a[2][3]={3,5,6,8}

#include <stdio.h>

int main(int argc, char *argv[])
{
    //二维数组的初始化
    //int a[2][3];

    //初始化方式1:按行初始化
    //全部初始化
    //int a[2][3] = {{10, 20, 30}, {666, 777, 888}};
    //局部初始化
    //没有赋值的位置的元素自动为0
    //int a[2][3] = {{10, 20}, {666}};

    //初始化方式2:逐个初始化
    //全部初始化
    //int a[2][3] = {1, 2, 3, 4, 5, 6};
    //局部初始化
    //没有赋值的位置的元素自动为0
    int a[2][3] = {1, 2, 3};

    printf("%d\n", a[0][0]);
    printf("%d\n", a[0][1]);
    printf("%d\n", a[0][2]);
    printf("%d\n", a[1][0]);
    printf("%d\n", a[1][1]);
    printf("%d\n", a[1][2]);

    return 0;
}

五、数组元素的引用方法

一维数组元素的引用方法

      数组名[下标];//下标代表数组元素在数组中的位置,注意从0开始

      int a[10];

      a[2];

二维数组元素的引用方法

      数组名[行下标][列下标];

      int a[3][4];

      a[1][2]

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    //一维数组的引用以及一维数组的遍历
    int a[6] = {111, 222, 333, 444, 555, 666};

    a[3] = 10000;

    //一维数组的遍历
    int i;
    for(i = 0; i < sizeof(a) / sizeof(int); i++)
    {
        printf("a[%d] = %d\n", i, a[i]);
    }

    printf("**********************\n");

    //二维数组的引用以及二维数组的遍历
    int b[3][4] = {1, 2, 3, 4,
                  5, 6, 7, 8,
                  9, 10, 11, 12};

    b[2][0] = 666;

    //二维数组的遍历
    int m, n;
    //外层循环控制行数
    for(m = 0; m < 3; m++)
    {
        //内层循环控制列数
        for(n = 0; n < 4; n++)
        {
            printf("%-4d", b[m][n]);
        }
        printf("\n");
    }

    return 0;
}

六、字符数组的定义和初始化问题
 

char c1[] ={‘c’,’ ’,’p’,’r’,’o’,’g’};

char c2[] = “c prog”;

char a[][5] = {
                {‘B’,’A’,’S’,’I’,’C’},

                {‘d’,’B’,’A’,’S’,’E’}

               };

char a[][6] = {“hello”,“world”};

字符数组的引用

      1.用字符串方式赋值比用字符逐个赋值要多占1 个字节,用于存放字符串结束标志‘\0’;

      2.上面的数组c2在内存中的实际存放情况为:

       注:'\0'是由C编译系统自动加上的

3.由于采用了'\0'标志,字符数组的输入输出将变得简单方便.

#include <stdio.h>

int main(int argc, char *argv[])
{
    //定义一个字符数组,通过scanf函数输入字符串并输出结果
    //通过赋值""这样的方式可以清除字符数组中的垃圾字符,让每一个元素都是\0
    char ch[32] = "";

    //数组名就是当前数组的首地址,所以scanf的第二个参数直接传数组名即可
    scanf("%s", ch);

    printf("ch = %s\n", ch);

    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言数组详解 的相关文章

  • 单片机寄存器的理解

    学习目标 xff1a 对寄存器的理解 学习内容 xff1a 本来在学DMA xff0c 突然看到江科大的b站视频 xff0c 在他的DMA视频中对寄存器进行了理解 xff0c 我觉得十分巧妙 xff0c 这是当时截的图 xff0c 中间竖着
  • python 类变量详解

    强烈建议先看我之前的面向对象基本了解 python中 xff0c 类变量又叫做类属性 然而类属性有分为3个不同的类型 类属性 xff0c 实例属性 xff0c 局部变量 class a 类属性 hobby 61 39 play sport
  • Python运行环境Ngrok内网穿透

    这次就教大家怎么在手机或机顶盒上运行Ngrok内网穿透 首先下载安卓上的Python运行环QPython apk 官网 http www qpython com 下载完后开始安装 xff0c 怎么安装安卓软件不用我怎么教了吧 复制pytho
  • 记一次PWN机(Vmware和Docker+VNC)的搭建

    基于Vmware搭建虚拟机 学长已经提供了镜像 xff0c 在Vmware界面打开那个镜像 xff0c 开机即可 Vmware和镜像下载地址 xff1a 链接 xff1a https pan quark cn s 057a23e631f5
  • vue.runtime.esm.js?2b0e:619 [Vue warn]: Invalid prop: type check failed for prop “index“. Expected S

    vue runtime esm js 2b0e 619 Vue warn Invalid prop type check failed for prop 34 index 34 Expected String with value 34 1
  • 解决vscode上边菜单栏不显示的问题

    由于我们不小心点击了哪个键 xff0c 导致上边的菜单栏不显示 两种解决方案 方法一 xff1a 点击下面的这个按钮 xff0c 会弹出一个弹框 点击一下菜单栏的可见性 xff0c 即可出来 方式二 xff1a 使用快捷键Ctrl 43 S
  • node+vue搜索和分页功能实现

    前端代码 lt template gt lt div class 61 34 main box 34 gt lt 卡片区 gt lt el card gt lt 搜索 gt lt el input placeholder 61 34 请输入
  • React面试题最全

    1 什么是虚拟DOM xff1f 虚拟DOM是真实DOM在内存中的表示 xff0c ul的表示形式保存在内存中 xff0c 并且与实际的DOM同步 xff0c 这是一个发生在渲染函数被调用和元素在屏幕上显示的步骤 xff0c 整个过程被称为
  • vue项目页面空白但不报错产生的原因分析

    vue项目中我们请求一个路由 xff0c 打开页面发现页面是空白的 xff0c 产生的主要原因有四种 xff1a 1 路由重复 如果配置了两个路由是重复的 xff0c 比如配置了两个 path xff0c 那么访问就会看到空白页面 xff0
  • react--电商商品列表使用

    目录 整体页面效果 项目技术点 拦截器的配置 主页面 添加商品 分页 xff0c 搜索 修改商品 删除商品 完整代码 整体页面效果 项目技术点 antd组件库 xff0c 64 ant design icons antd的图标库axios
  • 服务器端升级或者切换node版本

    1 查看版本 nvm list 2 选择你需要的版本 nvm use v18 15 0
  • lodash防抖节流

    应用场景 xff1a 当用户高频率的触发事件 xff0c 事件较短 xff0c 内部出现卡顿现象 解决方法 xff1a 防抖节流 防抖节流功作用 xff1a 主要目的是为了降低高频事件触发 xff0c 减少dom操作或请求次数 xff0c
  • 使用webpack(4版本)搭建vue2项目

    在学习webpack之前 xff0c 也从网上搜过一些用webpack搭建vue项目的博客 xff0c 但是在自己使用的时候会报各种的问题 xff0c 报错的根本原因其实就是版本的问题 xff0c 以下代码是经过解决了许多报错问题研究出来最
  • VUE调用摄像头PC

    页面效果 实现代码 lt template gt lt div id 61 34 app 34 gt lt router view gt lt 开启摄像头 gt lt Button type 61 34 primary 34 64 clic
  • koa2的脚手架koa-generator使用

    我们在搭建项目的时候 xff0c 会使用一些脚手架 xff0c 今天我们使用koa2的脚手架koa generator 使用非常简单 首先 xff0c 我们需要全局安装 npm install g koa generator 创建项目 ko
  • css行内元素、块元素、行内块元素的区别

    行内元素的特点 xff1a 1 和其他元素在一行显示 2 元素的宽度 高度 行高及底部边距不可编辑 3 元素的宽度就是它包含的文字或图片的宽度 xff0c 不可改变 4 行内元素只能容纳纯文本或者是其他的行内元素 xff08 a标签除外 x
  • STM32CubeMX安装

    一 STM32CubeMX下载 官网地址 xff1a STM32CubeMX STM32Cube初始化代码生成器 意法半导体STMicroelectronics 官网下载需要注册账号 网盘链接 xff08 6 8 xff09 xff1a 链
  • 关于汇编指令sar右移32位的情况,记录一下

    网上 对sar指令右移超过31位的情况 比如右移32位 右移33位 很少有详细的说明 为了防止下一次还有像我这样傻x的人不会 我就记录一下 我不会过多说基础 基础了解就行 xff0c 能懒就懒 1字节 sar 我们以一字节为例子 00412
  • vs2022 汇编环境配置,xxx.inc头文件找不到,出现报错,不影响正常代码生成的解决方案

    解决方案前提 1 你的include和lib路径已经配置好了 然后代码可以正常的生成一个exe 2 安装了的AsmDube 其实inc文件找不到 是AsmDub找不到 不是vs2022找不到 所以你就去AsmDube修改一下 所以你只需要告

随机推荐

  • 关于8皇后解决方法的浅析

    关于8皇后解决方法的浅析 众所周知 xff0c 解决8皇后最普遍的方法是回溯法 那具体是怎么样的呢 xff1f 大概思路 xff1a 定义一个int型数组queen xff0c 角标 1 2 7 代表皇后所在的行 xff0c 值代表皇后所在
  • Latex闲谈

    关于latex呢 xff0c 首先它是一个排版工具 xff0c 是一个将文章排版和文章内容分开的一个排版工具 有个问题是你是边写边排版呢还是用word写完之后再来说是进行这个排版呢 xff0c 对于我而言 xff0c 我更倾向于后者 xff
  • Linux下phpmyadmin忘记root的登录密码,找回方法

    第一步 xff1a 执行 etc init d mysql stop 结束当前正在运行的mysql进程 第二步 xff1a 执行 usr bin mysqld safe skip grant tables 用mysql安全模式运行并跳过权限
  • matlab郭彦甫-听课笔记-02

    可以分块 xff0c 分块之后可以进行分块执行run section 关系运算符 xff1a 61 不等于 取余函数 xff1a mod a b rem a b switch case case case otherwise 连乘函数 xf
  • 51单片机硬件介绍

    1 单片机是啥 单片机 xff0c 简称MCU xff0c 是微型计算机 xff0c 集成了一部计算机许多硬件功能 xff0c 有CPU 存储器 xff08 ROM RAM xff09 等 2 有了这样一个单片机芯片后 xff0c 怎么将程
  • matlab硬件支持包离线安装-(安装文件夹错误)

    dSupport Software Downloader MATLAB amp Simulinkhttps ww2 mathworks cn support install support software downloader html
  • 小结:卸载SolidWorks2018->重新安装系统->安装SolidWorks2020

    因为卸载SW2018卸载不干净 xff0c 所以在安装SW20版一直在出错 xff0c 错误如下 xff1a 这个错误解决后继续安装 xff0c 又发现没有出现原本序列号的那一界面 xff0c 然后还有异型孔向导安装不了 xff0c 最后还
  • FreeRTOS信号量 基于STM32

    目录 概述 一 信号量基本概念 1 二值信号量 2 计数信号量 3 互斥信号量 4 递归信号量 二 二值信号量运作机制 三 计数信号量运作机制 四 常用信号量函数接口讲解 1 创建二值信号量 xSemaphoreCreateBinary 2
  • FreeRTOS互斥量 基于STM32

    文章目录 一 互斥量基本概念 二 互斥量的优先级继承机制 三 互斥量应用场景 四 互斥量运作机制 五 互斥量函数接口讲解 1 互斥量创建函数 xSemaphoreCreateMutex 2 递归xSemaphoreCreateRecursi
  • FreeRTOS事件组 基于STM32

    概述 文章对事件组的 xff0c 应用场景 xff0c 运作机制 xff0c 以及事件的创建 xff0c 删除 xff0c 等待 xff0c 置位 xff0c 同步等操作 文章目录 概述 一 事件标志组简介 1 事件位 事件标志 2 事件组
  • FreeRTOS任务通知 基于STM32

    文章目录 一 任务通知简介 二 任务通知的运作机制 三 任务通知的函数接口讲解 1 xTaskGenericNotify 2 xTaskNotifyGive 3 vTaskNotifyGiveFromISR 4 xTaskNotify 5
  • FreeRTOS软件定时器 基于STM32

    文章目录 一 软件定时器的基本概念 二 软件定时器应用场景 三 软件定时器的精度 四 软件定时器的运作机制 五 软件定时器函数接口讲解 1 软件定时器创建函数 xTimerCreate 2 软件定时器启动函数 xTimerStart 3 软
  • FreeRTOS内存管理 基于STM32

    目录 一 内存管理的基本概念 二 内存管理的应用场景 三 heap 4 c 1 内存申请函数 pvPortMalloc 2 内存释放函数 vPortFree 四 内存管理的实验 五 内存管理的实验现象 一 内存管理的基本概念 在计算系统中
  • 关于ECSHOP模板架设的服务器php版本过高报错的解决方法集合

    1 admin index php admin sms url php ECSHOP模板 报错 xff1a Strict Standards mktime You should be using the time function inst
  • FreeRTOS中断管理 基于STM32

    文章目录 一 异常与中断的基本概念 二 中断的介绍 三 和中断相关的名词解释 四 中断管理的运作机制 五 中断延迟的概念 六 中断管理的应用场景 七 中断管理讲解 八 中断管理实验 九 中断管理实验现象 一 异常与中断的基本概念 异常是导致
  • 链表基础知识详解(非常详细简单易懂)

    概述 xff1a 链表作为 C 语言中一种基础的数据结构 xff0c 在平时写程序的时候用的并不多 xff0c 但在操作系统里面使用的非常多 不管是RTOS还是Linux等使用非常广泛 xff0c 所以必须要搞懂链表 xff0c 链表分为单
  • FreeRTOS临界段的保护

    什么是临界段 临界段用一句话概括就是一段在执行的时候不能被中断的代码段 在 FreeRTOS 里面 xff0c 这个临界段最常出现的就是对全局变量的操作 xff0c 全局变量就好像是一个枪把子 xff0c 谁都可以 对他开枪 xff0c 但
  • SPI通讯协议详解 基于STM32

    SPI 协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议 Serial Peripheral Interface xff0c 即串行外围设备接口 xff0c 是 一种高速全双工的通信总线 它被广泛地使用在 ADC LCD 等设备与 MC
  • C语言编译过程

    C语言的编译过程 xff1a 预处理 编译 汇编 链接 gcc E hello c o hello i 1 预处理 gcc S hello i o hello s 2 编译 gcc c hello s o hello o 3 汇编 gcc
  • C语言数组详解

    目录 一 数组的概念 二 数组的分类 2 1 按元素的类型分类 2 2 按维数分类 三 数组的定义 3 1 一维数组的定义 格式 xff1a 3 2 二维数组的定义 四 定义并初始化 4 1 一维数组的初始化 4 2 二维数组的初始化 五