C语言进阶——数组(2)
2026/7/28 20:28:57 网站建设 项目流程

昨天我们学习了一维整形数组的有关知识,今天我们学习一维字符数组与二维数组。知识点如下,分享给正在入门C语言的小伙伴。

一、一维字符型数组
C语言里面没有专门的字符串类型,我们平时操作字符串,全部依靠字符型数组实现,这是一个关键点。

  1. 字符数组基础定义
    格式:
    char 数组名[元素个数];
    这里要注意:
  2. 方括号里的元素个数必须是常量,不能用变量;
  3. 数组容量一定要留足空间,字符串末尾自带结束符’\0’,存储字符串时,需要多占用1个位置存放它。

定义示例:
char str[20];
可以通过下标单独访问每一个字符:str[0]、str[1]……

  1. 存储空间大小区分
    char str[20];
    数组占用空间 = 数组元素总个数。
    我们可以用 sizeof(a)/sizeof(a[0]) 计算数组一共拥有多少个元素。
    但是sizeof 和后面会提到的strlen完全不是一个东西,不可混淆。

  2. 字符数组初始化
    初始化不等于赋值,数组定义完成后,不能直接写 str=“hello”。
    几种合法初始化方式:
    1. 完整初始化
    char str[6]={‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’};
    char str[6]={“hello”};
    char str[6]=“hello”;
    2. 局部初始化
    没有手动赋值的元素,系统会自动初始化为0,也就是等价于’\0’。
    char str[6]={‘h’,‘e’,‘l’};
    3. 默认初始化
    char str[]=“hello”;
    其中默认初始化日常练习可以用,但正式代码不推荐。

注意:
0:数字零
‘\0’:字符串结束符,ASCII值等价于0
‘0’:字符0,ASCII值是48,三者千万不要混淆!

  1. 字符串输出

    1. printf(“%s”, str);
    2. puts(str);
      puts打印字符串之后,会自动额外输出一个换行符。
  2. 字符串接收输入

    1. scanf(“%s”, str);
      遇到空格就停止读取,不能接收带空格的句子。
    2. gets(str);
      是危险函数,编译器会警告,存在缓冲区溢出风险,尽量少使用。
  3. 字符串常用操作(库函数)

使用这些函数需要引入头文件 <string.h>

  1. strlen() — 获取字符串有效长度
    从开头计数,直到遇见’\0’,不包含结束符。
  2. strcpy() — 字符串拷贝
    strcpy(str,“hello world”);
    目标数组空间必须足够大,能够放下完整字符串,否则发生越界。
  3. strcat() — 字符串拼接
    strcat(str1,str2);
    把str2接到str1末尾,str1剩余空间要足够容纳拼接后的全部字符。
  4. strcmp() — 字符串比较
    ret = strcmp(str1,str2);
    规则:从左向右逐个对比字符ASCII码
    返回 0:两个字符串完全相等
    返回 >0:str1大于str2
    返回 <0:str1小于str2
    不能直接用 == 判断两个字符串是否相等!这是新手高频错误。

二、二维整型数组

  1. 定义格式
    int 数组名[行数][列数];
    int a[2][3];
    行数、列数都必须是常量。

  2. 访问方式
    a[0][0]、a[0][1]、a[1][0]

  3. 存储规则
    二维数组在内存里逐行连续存放。
    可以简单理解:二维数组就是由多个一维数组组成的数组。

  4. 初始化

    1. 全部初始化
      int a[2][3]={1,2,3,4,5,6};
      int a[2][3]={{1,2,3},{4,5,6}};
    2. 局部初始化
      未赋值元素自动初始化为0
      int a[2][3]={1,2,3,4};
    3. 省略行数初始化
      注意:行可以省略,列绝对不能省略
      int a[][3]={1,2,3,4,5,6};

看到这里今天的内容就已经结束了。
我想提醒大家一维字符数组是现阶段的重中之重,C语言字符串所有操作都建立在它之上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询