C语言:一维数组、二维数组、字符数组介绍

数组

  • 介绍
    • 一维数组
      • 定义
      • 应用方法
        • 初始化
      • 举例
        • 示例
        • 结果
    • 二维数组
      • 定义
      • 应用方法
        • 初始化
      • 举例
        • 示例
        • 结果
    • 字符数组
      • 定义
      • 应用方法
        • 初始化
      • 举例
        • 示例
        • 结果
        • 分析

介绍

在C语言中,数组是一种基本的数据结构,用于存储一系列相同类型的数据。数组可以是多维的,最常见的是一维数组和二维数组。字符数组用于存储字符串。

一维数组

定义

一维数组是一系列数据的集合,每个数据都是相同类型的,可以通过索引来访问。

类型说明符 数组名[数组长度];

应用方法

  • 初始化:可以在定义时初始化数组
  • 访问:通过索引访问数组元素,索引从0开始
  • 遍历:通常使用for循环来遍历数组
初始化

在C语言中,一维数组可以在声明时进行初始化。
以下是一些常见的初始化方法:

  1. 完全初始化:初始化时为数组的每个元素指定一个值
    int arr[5] = {1, 2, 3, 4, 5}; 
    // 所有元素都被初始化
    
  2. 部分初始化:初始化时只为数组的一部分元素指定值,未指定的元素自动初始化为0
    int arr[5] = {1, 2};
    // arr[0] = 1, arr[1] = 2, arr[2] = arr[3] = arr[4] = 0
    
  3. 省略数组大小:在初始化时可以省略数组的大小,编译器会根据初始化列表中的元素数量自动确定数组的大小
    int arr[] = {1, 2, 3, 4, 5}; 
    // 数组大小为5
    
  4. 指定初始化器:C99标准引入了指定初始化器,可以初始化数组的特定元素
    int arr[5] = {[2] = 10, [4] = 20};
    // arr[2] = 10, arr[4] = 20, 其他元素为0
    
  5. 字符串初始化:字符数组可以用字符串常量进行初始化,编译器会在字符串的末尾自动添加\0(空字符)作为结束符
    char str[] = "Hello";
    // 包含空字符'\0',数组大小为6
    
  6. 零初始化:如果数组在声明时没有被显式初始化,那么其中的元素将自动初始化为0(对于整数和浮点数)或空字符(对于字符数组)
    int arr[5]; 
    // 所有元素都初始化为0
    

示例:

#include <stdio.h>
int main() {
    int arr1[5] = {1, 2, 3, 4, 5}; // 完全初始化
    int arr2[5] = {1, 2}; // 部分初始化
    int arr3[] = {1, 2, 3, 4, 5}; // 省略数组大小
    int arr4[5] = {[2] = 10, [4] = 20}; // 指定初始化器
    char str[] = "Hello"; // 字符串初始化
    printf("arr1: %d %d %d %d %d\n", arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]);
    printf("arr2: %d %d %d %d %d\n", arr2[0], arr2[1], arr2[2], arr2[3], arr2[4]);
    printf("arr3: %d %d %d %d %d\n", arr3[0], arr3[1], arr3[2], arr3[3], arr3[4]);
    printf("arr4: %d %d %d %d %d\n", arr4[0], arr4[1], arr4[2], arr4[3], arr4[4]);
    printf("str: %s\n", str);
    return 0;
}

结果:
在这里插入图片描述

!!!注意,数组的大小必须是一个整型常量表达式,这意味着数组的大小不能是变量!

举例

示例
#include <stdio.h>
int main() {
    int numbers[5] = {1, 2, 3, 4, 5}; // 定义并初始化数组
    int sum = 0;
    // 遍历数组并计算元素之和
    for (int i = 0; i < 5; i++) {
        sum += numbers[i];
    }
    printf("数组元素之和为:%d\n", sum);
    return 0;
}
结果

在这里插入图片描述

二维数组

定义

二维数组可以看作是数组的数组,即它由多个一维数组组成,通常用于表示表格或矩阵。

类型说明符 数组名[行数][列数];

应用方法

  • 初始化:可以在定义时初始化二维数组。
  • 访问:通过行索引和列索引访问数组元素。
  • 遍历:通常使用嵌套的for循环来遍历二维数组。
初始化

在C语言中,二维数组可以在声明时进行初始化。
以下是一些常见的初始化方法:

  1. 完全初始化:初始化时为二维数组的每个元素指定一个值
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; 
    // 所有元素都被初始化
    
  2. 部分初始化:初始化时只为二维数组的一部分元素指定值,未指定的元素自动初始化为0
    int arr[2][3] = {{1}, {2}};
    // arr[0][0] = 1, arr[1][0] = 2, 其他元素为0
    
  3. 省略行大小:在初始化时可以省略数组的行大小,但列大小必须指定。编译器会根据初始化列表中的元素数量自动确定行的大小
    int arr[][3] = {{1, 2, 3}, {4, 5, 6}}; 
    // 自动确定为2行3列的数组
    
  4. 省略所有大小:如果两个维度都省略,则必须提供足够的初始化器来确定大小
    int arr[][] = {{1, 2}, {3, 4}}; 
    // 错误,至少需要指定一维的大小
    
  5. 逐个初始化:可以逐个为二维数组的元素指定值,而不必按照行的形式组织
    int arr[2][3] = {1, 2, 3, 4, 5, 6}; 
    // 等同于{{1, 2, 3}, {4, 5, 6}}
    
  6. 零初始化:如果二维数组在声明时没有被显式初始化,那么其中的元素将自动初始化为0
    int arr[2][3]; 
    // 所有元素都初始化为0
    

示例:

#include <stdio.h>
int main() {
    int arr1[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 完全初始化
    int arr2[2][3] = {{1}, {2}}; // 部分初始化
    int arr3[][3] = {{1, 2, 3}, {4, 5, 6}}; // 省略行大小
    int arr4[2][3] = {1, 2, 3, 4, 5, 6}; // 逐个初始化
    int arr5[2][3]; // 零初始化
    // 打印数组内容
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr1[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr2[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr3[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr4[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr5[i][j]);
        }
        printf("\n");
    }
    return 0;
}

结果:
在这里插入图片描述
!!!注意,二维数组的第一维的大小可以省略(如果提供了足够的初始化器来确定行数),但第二维的大小必须指定

举例

示例
#include <stdio.h>
int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义并初始化二维数组
    int i, j;
    // 遍历并打印二维数组
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
结果

在这里插入图片描述

字符数组

定义

字符数组用于存储字符串,实际上是一个一维的字符集合。

char 数组名[长度];

应用方法

  • 初始化:可以在定义时初始化字符数组。
  • 访问:通过索引访问字符。
  • 字符串操作:可以使用字符串库函数(如strcpy, strlen, strcmp等)进行操作。
初始化

在C语言中,字符数组用于存储字符串,可以在声明时进行初始化。
以下是一些常见的初始化方法:

  1. 字符串初始化:使用双引号括起来的字符串常量来初始化字符数组。编译器会在字符串的末尾自动添加一个空字符\0作为字符串的结束标志。
    char str[] = "Hello"; 
    // 自动包含空字符'\0',数组大小为6
    
  2. 字符初始化:使用单引号括起来的字符来初始化字符数组的每个元素。
    char str[] = {'H', 'e', 'l', 'l', 'o', '\0'}; 
    // 手动添加空字符,数组大小为6
    
  3. 部分初始化:初始化时只为字符数组的一部分元素指定值,未指定的元素自动初始化为空字符\0
    char str[10] = "Hello"; 
    // str[0]到str[4]被初始化为'H', 'e', 'l', 'l', 'o',其余为'\0'
    
  4. 省略数组大小:在初始化时可以省略字符数组的大小,编译器会根据初始化列表中的元素数量自动确定数组的大小,并添加一个额外的元素用于存储空字符\0
    char str[] = "Hello"; 
    // 自动确定为大小为6的数组
    
  5. 零初始化:如果字符数组在声明时没有被显式初始化,那么其中的元素将自动初始化为空字符\0
    char str[10]; 
    // 所有元素都初始化为'\0'
    

示例:

#include <stdio.h>
int main() {
    char str1[] = "Hello"; // 字符串初始化
    char str2[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 字符初始化
    char str3[10] = "Hello"; // 部分初始化
    char str4[] = "Hello"; // 省略数组大小
    char str5[10]; // 零初始化
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    printf("str3: %s\n", str3);
    printf("str4: %s\n", str4);
    // 打印str5的内容和长度
    printf("str5: ");
    for (int i = 0; i < 10; i++) {
        printf("%c", str5[i]);
    }
    printf("\n");
    return 0;
}

输出结果:
在这里插入图片描述

!!!注意,字符数组的大小必须足够容纳字符串中的所有字符以及空字符\0。如果数组大小小于字符串长度,则编译器不会添加空字符,这可能导致字符串处理函数的行为不确定!

举例

示例
#include <stdio.h>
#include <string.h>
int main() {
    char greet[6] = "Hello"; // 定义并初始化字符数组
    char message[20];
    // 使用strcpy复制字符串
    strcpy(message, "World");
    strcat(greet, " ");
    strcat(greet, message);
    printf("拼接后的字符串:%s\n", greet);
    printf("字符串长度:%zu\n", strlen(greet));
    return 0;
}
结果

在这里插入图片描述

分析

在上述示例中,字符数组greet被初始化为"Hello",然后使用strcat函数将message的内容连接到greet后面,最终输出拼接后的字符串及其长度。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

phpstorm 设置变量,自动补全代码

效果 进入设置->实时模板->PHP->添加 添加动态模板->完善写法 定义->选择PHP->应用就行

什么是宏观经济的先行指标、同步指标与滞后指标

宏观经济波动是一种周期性的繁荣、衰退、萧条、复苏循环变化过程&#xff0c;在这种变动中&#xff0c;不同经济指标的变动并非总与宏观经济运行步调一致。按统计指标变动轨迹与宏观经济变动轨迹的时间关系,可以将其划分为先行指标、同步指标和滞后指标。 一、概念和作用 先行…

JetBrains CLion v2023.3.4 激活版 (C/C++ 集成开发IDE)

前言 JetBrains CLion是一款跨平台的C/C集成开发环境&#xff0c;由JetBrains公司推出。其最新版本支持C14几乎完全&#xff0c;并初步支持C17&#xff0c;使得编写代码更加便捷。CLion还提供了Disassembly view&#xff08;反汇编视图&#xff09;&#xff0c;即使没有源代码…

《欢乐钓鱼大师》攻略:怎么在竞标赛中获得高分?

《欢乐钓鱼大师》锦标赛是游戏中的一项激动人心的钓鱼比赛活动&#xff0c;而在这场比赛中&#xff0c;如何获得高分成为了每位钓手追求的目标。在这篇攻略中&#xff0c;我们将为您详细介绍如何通过优化鱼竿、管理体力、利用buff和词条以及前期准备等方面来提高您在锦标赛中的…

信号分解 | RLMD(鲁棒性局部均值分解)-Matlab

分解效果 RLMD(鲁棒性局部均值分解) RLMD(鲁棒性局部均值分解)-Matlab 代码实现 % %% 清除所有变量 关闭窗口 clc clear all close all%% 导入数据 % data = xlsread(Data.xlsx);%% 输入信号%% RLMD分解 %参数进行设置 % options.display =

【React】CSS 局部样式

书写 CSS 的时候&#xff0c;如果 CSS 文件名包含 module&#xff0c;那么说明该 CSS 是一个局部 CSS 样式文件&#xff0c;类似于 vue 中的 scoped。 .avatarContainer {width: 40px;height: 40px;border-radius: 50%;background: rgb(213, 226, 226); }import styles from ..…

【Redis 开发】缓存雪崩和缓存击穿

缓存问题 缓存雪崩解决方案 缓存击穿互斥锁逻辑时间基于互斥锁解决缓存击穿问题基于逻辑过期方式解决缓存击穿问题 缓存雪崩 缓存雪崩是指在同一时间段&#xff0c;大量的缓存key同时失效或者Redis服务器宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力 解决…

游戏发行困境及OgGame云游戏解决方案简述

随着全球化浪潮的持续推进&#xff0c;中国游戏开发者们不再满足于国内市场的发展&#xff0c;而是开始将目光投向更为广阔的海外市场。这一趋势的崛起背后&#xff0c;是中国企业意识到国际化是其发展的必由之路&#xff0c;也是游戏行业突破国内困境的体现。本文将简要阐述游…

【1731】jsp 房租跟踪监控管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 房租跟踪监控管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

为什么常用氢化物

知识星球&#xff08;星球名&#xff1a;芯片制造与封测社区&#xff09;里的学员问&#xff1a;diffusion工序&#xff0c;所需要的气体种类有哪些&#xff1f; Diffusion是什么工序&#xff1f; "Diffusion"工序是通过热能将掺杂剂原子扩散到硅片中&#xff0c;以形…

C++系列-输入输出

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” C输入和输出 我们都知道C语言的输出是用printf函数来实现的&#xff0c;那么C呢&#xff0c;它的实现逻辑是什么呢&#xff0c;让我们一起来看一下&#xff0c; #include<i…

【代码随想录刷题记录】LeetCode27移除元素

题目地址 1. 思路 1.1 基本思路及代码的初步实现 基本思路大体上和卡尔老师的想法是一致的&#xff0c;详见代码随想录&#xff1a;数组&#xff1a;移除元素&#xff0c;暴力法大家都能想到&#xff0c;我这里写一下算法时间复杂度为 O ( n ) O(n) O(n)时候的思路&#xff…

【深度学习】YOLOv5,烟雾和火焰,目标检测,防火检测,森林火焰检测

文章目录 数据收集和数据标注查看标注好的数据的脚本下载yolov5创建 dataset.yaml训练参数开始训练yolov5n训练训练后的权重下载gradio部署 数据收集和数据标注 搜集数据集2w张。 pip install labelme labelme 然后标注矩形框和类别。 下载数据请看这里&#xff1a; https:…

2023年江西省电子专题赛——解析一

由于网上对这个竞赛资料甚少&#xff0c;为了方便省内学子交流学习&#xff0c;可加Q群聊&#xff1a;778772385 电源部分&#xff1a;比赛中只给了3个IN4007整流管&#xff0c;无法构成传统整流桥的形式&#xff0c;并且题目又要求全波整流。 我这边用两个二极管构成全波整流…

Web3解密:理解去中心化应用的核心原理

引言 在当前数字化时代&#xff0c;去中心化技术和应用正在逐渐引起人们的关注和兴趣。Web3技术作为去中心化应用&#xff08;DApps&#xff09;的基础&#xff0c;为我们提供了一个全新的互联网体验。但是&#xff0c;对于许多人来说&#xff0c;这个复杂的概念仍然充满了神秘…

【数据结构与算法】:手搓顺序表(Python篇)

文章目录 一、顺序表的概念二、顺序表的实现1. 顺序表的创建1.1 扩容1.2 整体建立顺序表 2. 顺序表的基本运算算法2.1 顺序表的添加&#xff08;尾插&#xff09;2.2 指定位置插入2.3 指定位置删除2.4 顺序表的查找2.5 顺序表元素的索引访问2.6 顺序表元素的修改2.7 顺序表长度…

Mouse without Borders(无界鼠标)使用教程 多台电脑(最多4)共用鼠标键盘,换言之一套键鼠操作多台电脑,跨电脑文件拖动传输

Mouse without Borders&#xff08;无界鼠标&#xff09;使用教程 目的&#xff1a;多台电脑&#xff08;最多4&#xff09;共用鼠标键盘&#xff0c;换言之一套键鼠操作多台电脑。 优势&#xff1a;微软官方软件&#xff0c;对于windows系统友好&#xff0c;轻量实用。 劣势…

【Diffusion实战】训练一个diffusion模型生成蝴蝶图像(Pytorch代码详解)

上一篇Diffusion实战是确确实实一步一步走的公式&#xff0c;这回采用一个更方便的库&#xff1a;diffusers&#xff0c;来实现Diffusion模型训练。 Diffusion实战篇&#xff1a;   【Diffusion实战】训练一个diffusion模型生成S曲线&#xff08;Pytorch代码详解&#xff09;…

锁,数据同步

目录 原子操作中断控制自旋锁信号量小结 经常遇到数据同步的问题&#xff0c;具体有哪些情况呢&#xff1f;来聊一聊。我知道的&#xff0c;应该有以下四种&#xff0c;原子操作&#xff0c;中断控制&#xff0c;自旋锁和信号量。 原子操作 适用情况和场景 原子操作经常用在单…

vue实现录音并转文字功能,包括PC端web,手机端web

vue实现录音并转文字功能&#xff0c;包括PC端&#xff0c;手机端和企业微信自建应用端 不止vue&#xff0c;不限技术栈&#xff0c;vue2、vue3、react、.net以及原生js均可实现。 原理 浏览器实现录音并转文字最快捷的方法是通过Web Speech API来实现&#xff0c;这是浏览器…