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.hqwc.cn/news/652433.html

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

相关文章

Android --- 网络请求

通常在 Android 中进行网络连接一般使用 Scoket 和HTTP&#xff0c;HTTP 请求方式比 Scoket 多。HTTP 请求一般采用原生的 HttpClient 和 HttpUrlConnection 的两种网络访问方式&#xff08;系统自带的&#xff09;。但是在 Android 5.0 的时候 Google 就不推荐使用 HttpClient…

Bytebase 2.16.0 - 支持 Oracle 和 SQL Server DML 变更的事前备份

&#x1f680; 新功能 支持 Oracle 和 SQL Server DML 变更的事前备份。 支持在 SQL 编辑器中显示存储过程和函数。 支持兼容 TDSQL 的 MySQL 和 PostgreSQL 版本。 支持把数据库密码存储在 AWS Secrets Manager 和 GCP Secret Manager。 支持通过 IAM 连接到 Google Clou…

Java | Leetcode Java题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; class Solution {public int totalNQueens(int n) {Set<Integer> columns new HashSet<Integer>();Set<Integer> diagonals1 new HashSet<Integer>();Set<Integer> diagonals2 new HashSet<Integer>…

ArcGIS小技巧—一文带你理清个人地理数据库和文件地理数据库

不知各位GISer在使用Arcgis软件时是否会遇到这样一个问题&#xff0c;在新建一个地理数据库来存放要素数据集时会有文件地理数据库和个人地理数据库两种&#xff0c;那么&#xff0c;这两种地理数据库有何区别呢&#xff1f; 首先&#xff0c;我们先来看看地理数据库的定义&…

Thread方法具体解析

对于run方法 如果该线程是使用单独的 Runnable run 对象构造的&#xff0c;则调用该 Runnable 对象的 run 方法&#xff1b;否则&#xff0c;此方法不执行任何操作并返回。 对于start方法 导致该线程开始执行&#xff1b; Java虚拟机调用该线程的run方法。 这里介绍一个快捷键…

【OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

c++map类operator[]详解

定义 让我们来看一下标准库里对该函数的定义. map::operator[] - C Reference (cplusplus.com) 参数是一个key_val类型的值,返回值是对应key 的value值,如果key不存在的话,value会调用其默认构造函数来初始化. 使用 举个例子 int main() {map<string, string> dict{ {…

基于springboot的高校宣讲会管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Ubuntu解密:Root账户登录问题一网打尽

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Ubuntu解密&#xff1a;Root账户登录问题一网打尽 前言Root用户简介Root账户无法登录的原因重设Root账户密码解决ssh不能root登录问题安全性考虑 前言 Ubuntu作为广受欢迎的Linux发行版&#xff0c;对…

Vue3+ts(day03:ref和reactive)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

Docker 入门篇(二)-- Linux 环境离线安装

引言 docker 系列文章&#xff1a; Docker 入门篇&#xff08;一&#xff09;-- 简介与安装教程&#xff08;Windows和Linux&#xff09; 一、安装环境准备 centos &#xff1a;CentOS Linux release 7.6.1810 (Core)docker 版本&#xff1a;docker-26.1.0.tgz 官网下载地址…

Sy8网络管理命令(ubuntu23.10和centos8)

前言、 本次实验主要是扩展学习&#xff0c;不仅限在课本的内容。毕竟课本的内容太过于陈旧了。需要的童鞋看看。 说明&#xff1a;&#xff08;书本中sy9”第3.实验内容“大家还是要做下。&#xff09; 1、使用ubuntu做实验的童鞋只要看第二、三、四、七章节的部分内容。 2、使…