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后面,最终输出拼接后的字符串及其长度。

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

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

相关文章

Vscode上使用Clang,MSVC, MinGW, (Release, Debug)开发c++完全配置教程(包含常见错误),不断更新中.....

1.VSCode报错头文件找不到 clang(pp_file_not_found) 在Fallback Flags中添加 -I&#xff08;是-include的意思&#xff0c;链接你的编译器对应头文件地址&#xff0c;比如我下面的是MSVC的地址&#xff09; 问题得到解决~

【Elasticsearch<二>✈️✈️】基本属性概念与MySQL数据库的不同之处

目录 &#x1f378;前言 &#x1f37b;一、Elasticsearch 基本属性 1.1 ES VS MySQL 1.2 ES 属性概念 1.3 ES 的增删改查 &#x1f37a;二、自动补全场景 2.1 场景举例 2.2 使用数据分词器 2.3 查询的流程 2.4 整个查询流程图 &#x1f379;章末 &#x1f378;前言 上次初步…

C++进阶--智能指针

智能指针的概念 智能指针是C中的一个重要概念&#xff0c;用于管理动态分配的对象内存。它是一个类模板&#xff0c;通过封装原始指针&#xff0c;并在对象生命周期结束时自动释放内存&#xff0c;从而避免了内存泄漏和资源管理的繁琐工作。 C标准库提供了多种常见的智能指针…

CasinoRoyale靶机练习实践报告

CasinoRoyale靶机练习实践报告 下载地址: https://drive.google.com/open?id1FYP246L63zShV00wOckAQ5F5XJ4HkZ0Lhttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ovahttps://download.vulnhub.com/casinoroyale/CasinoRoyale.ova.torrent ( Magnet) 1 安装靶机 …

【Java Spring MVC项目异常解决】HTTP 500

HTTP 500状态码表示“内部服务器错误”&#xff08;Internal Server Error&#xff09;。这是一个通用的错误响应&#xff0c;表明服务器在处理请求时遇到了预料之外的情况&#xff0c;导致无法完成请求。500错误是服务器端错误的一种&#xff0c;与客户端无关。在Web开发中&am…

强化SSH服务安全的最佳实践

SSH&#xff08;Secure Shell&#xff09;作为一种广泛应用于Linux和其他类Unix系统中的强大工具&#xff0c;为管理员提供了安全的远程登录和命令执行功能。在现今高度互联的网络环境中&#xff0c;确保SSH服务的安全性显得尤为重要。本文将详细阐述一系列SSH服务的最佳实践&a…

【LangChain系列 12】Prompt模版——序列化

本文速读&#xff1a; PromptTemplate FewShotPromptTemplate 通常prompt以文件形式存储比python代码更好&#xff0c;一方面可以更容易共享、存储。本文将介绍在LangChain中如何对prompt以不同的方式序列化。 一般来说&#xff0c;对于序列化有以下两个设计原则&#xff1a…

吴恩达机器学习笔记:第 8 周-13 聚类(Clustering)13.3-13.5

目录 第 8 周 13、 聚类(Clustering)13.3 优化目标13.4 随机初始化13.5 选择聚类数 第 8 周 13、 聚类(Clustering) 13.3 优化目标 K-均值最小化问题&#xff0c;是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和&#xff0c;因此 K-均值的代价函数&#xff08;又…

《微信公众号开发---一站式开发流程完整版本》 测试公众号账号及本地环境搭建/验证本地编写的代码,接入微信指南请求测试正常

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 1.准备工作 1.需要先登录微信公众号平台&#xff1a;微信公众平台 注册如果是公司开发请注册服务号&#xff0c;个人开发请注册订阅号 2.注册完成&#xff0c;需要开通认证 2.以上操作完成&#xff0c…

通信原理(2)--随机过程

通信原理(2)–随机过程 3.1随机过程的基本概念 随机过程{x(t)}由一族时间函数 x i ( t ) x_i(t) xi​(t)&#xff0c;i1,2.3…组成&#xff0c;每一个时间函数 x i ( t ) x_i(t) xi​(t)称为随机过程{x(t)}的一个样本函数&#xff08;一个实现&#xff09; 每个样本函数在时间…

ASP.NET某企业信息管理系统的设计与实现

摘 要 信息管理系统就是我们常说的MIS(Management Information System),它是一个计算机软硬件资源以及数据库的人-机系统。经过对题目和内容的分析,选用了Microsoft公司的ASP.NET开发工具,由于它提供了用于从数据库中访问数据的强大工具集,使用它可以建立开发比较完善的数据库…

《2024年绿色发展报告》:算力与电力矛盾愈加突出!

2024年4月22日&#xff0c;第55个世界地球日&#xff0c;超聚变发布《2024年绿色发展报告》&#xff0c;向社会展示超聚变面对宏观形势变化、产业趋势变化&#xff0c;推进绿色发展、科技向绿的探索与实践成果。 2023年&#xff0c;算力产业发生了深刻变化。大模型带来AI算力需…

Git如何配合Github使用

1.安装Git https://git-scm.com/ ##2.配置 Git 安装完成后&#xff0c;你需要设置 Git 的用户名和邮箱地址&#xff0c;这样在提交代码时就能知道是谁提交的。你可以在命令行中输入以下命令来配置&#xff1a; git config --global user.name "Your Name" git con…

探索UTONMOS《神念无界-源起山海》元宇宙游戏的奇幻世界

在科技的前沿&#xff0c;元宇宙游戏如同一扇神秘的大门&#xff0c;缓缓开启&#xff0c;引领我们进入一个前所未有的奇幻世界。 UTONMOS《神念无界-源起山海》元宇宙游戏是数字世界的巅峰之作&#xff0c;它打破了现实与虚拟的界限&#xff0c;让玩家能够身临其境地体验各种奇…

U盘格式转换GPT格式转回DOS

当前格式 fdisk /dev/sdb# 在 fdisk 提示符下&#xff0c;输入以下命令删除分区&#xff1a; d # 选择要删除的分区编号&#xff08;如 1、2 等&#xff09; w开始转换 [rootnode-24 ~]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.37.4). Changes will remain in memory o…

[笔试训练](八)

目录 022&#xff1a;求最小公倍数 023&#xff1a;数组中的最长连续子序列 024&#xff1a;字母收集 022&#xff1a;求最小公倍数 求最小公倍数_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 求最小公倍数公式&#xff1a;lcm(a,b)a*b/gcd(a,b)&am…

Android使用ProtoBuf 适配 gradle7.5 gradle8.0

ProtoBuf 适配 Gradle7.5 gradle-wrapper.properties 配置 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.5-bin.zipProject&#xff1a;build.gradle: plugins {id com.android.application version 7.4.2 apply falseid com.android.library versio…

星尘智能 AI 机器人 S1——国产机器人的巅峰之作

AI智能机器人真的太炸裂了 国产科技威武-CSDN直播AI智能机器人真的太炸裂了 国产科技威武https://live.csdn.net/v/382519 最近发现了一个国产的机器人&#xff0c;真的让人惊叹不已&#xff01;它就是星尘智能 AI 机器人 S1&#xff01; 这个机器人简直太牛逼了&#xff01;…

elaticsearch windows安装

es下载地址 https://www.elastic.co/cn/downloads/elasticsearch https://www.elastic.co/cn/downloads/past-releases#elasticsearch 在这里插入图片描述 下载直接解压&#xff0c;解压后目录 双击bin目录下的elasticsearch.bat开启服务 注意&#xff1a;9300 端口为 Elas…

03 spring-boot+mybatis+jsp 的增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 用户信息的增删改查然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 jsp 的 基础的试题的增删改查 学习项…