C语言数组总结

本文详细介绍了C语言中的数组,包括一维数组的定义、二维数组的使用,以及字符数组和字符串的概念、结束标志和长度。还探讨了字符串处理函数,如连接、复制和比较函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是数组

int a[4];
  1. 在内存中分配4个int类型的内存空间,共4×4=16 个字节,并为它们起了一个名字,叫 a。
  2. 我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如 int a[4];就定义了一个长度为 4 的整型数组,名字是 a。
  3. 数组中的每个元素都有一个序号,从0开始,称为下标。使用数组元素时指明下标即可,
数组的形式为:arrayName[index]
  1. arrayName 为数组名称,index 为下标。例如,a[0] 表示第 0 个元素,a[3] 表示第 3 个元素。
  2. 下为使用循环结构将数据放入数组中(也就是为数组元素逐个赋值),然后再使用循环结构输出(也就是依次读取数组元素的值)的代码:
#include <stdio.h>
#pragma warning(disable: 4996)
int main() {
	int nums[10];
	int i; //从控制台读取用户输入
	 for (i = 0; i<10; i++) {
		scanf("%d", &nums[i]); //注意取地址符 &,不要遗忘哦
	}
	//依次输出数组元素
	for (i = 0; i<10; i++) {
		printf("%d ", nums[i]);
	}
	return 0;
}

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

数组的定义方式:dataType arrayName[length]
  • dataType 为数据类型,arrayName 为数组名称,length 为数组长度。
  • 需要注意的是数组中每个元素的数据类型必须相同,对于 int a[4];,每个元素都必须为 int。
  • 数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过。
    数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。

二、C语言二维数组

二维数组的定义dataType arrayName[length1][length2];
  • 其中dataType 为数据类型,arrayName 为数组名,length1 为第一维下标的长度,length2 为第二维下标的长度。
  • 我们可以将二维数组看做一个 Excel 表格,有行有列,length1 表示行数,length2 表示列数,要在二维数组中定位某个元素,必须同时指明行和列。例如
int a[3][4];
  • 定义了一个3行4列的二维数组,共有 3×4=12 个元素,数组名为 a
  • 如果想表示第 2 行第 1 列的元素,应该写作 a[2][1]。
  • 在 C 语言中,二维数组是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的 4 个元素也是依次存放。数组 a 为 int 类型,每个元素占用 4 个字节,整个数组共占用 4×(3×4)=48 个字节。
二维数组的初始化(赋值)
  • 二维数组的初始化可以按行分段赋值,也可按行连续赋值。

例如,对于数组 a[5][3],

  1. 按行分段赋值应该写作:
    int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
  2. 按行连续赋值应该写作:
    int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
  • 对于二维数组的初始化还要注意以下几点:
  1. 可以只对部分元素赋值,未赋值的元素自动取“零”值。
  2. 如果对全部元素赋值,那么第一维的长度可以不给出。
  3. 二维数组可以看作是由一维数组嵌套而成的;如果一个数组的每个元素又是一个数组,那么它就是二维数组。当然,前提是各个元素的类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组,C 语言允许这种分解。

三、C语言字符数组和字符串

字符数组
  • 用来存放字符
  • 实际上是一系列字符的集合,也就是字符串。
  • 在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。
  • C 语言规定,可以将字符串直接赋值给字符数组。例如:
char str[30] = { "c.biancheng.net" };
char str[30] = "c.biancheng.net"; //这种形式更加简洁,实际开发中常用
  • 但是需要留意一个坑,字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。
字符串结束标志
  • 在 C 语言中,字符串总是以’\0’作为结尾,所以’\0’也被称为字符串结束标志,或者字符串结束符。
  • 由" "包围的字符串会自动在末尾添加’\0’。
  • 当用字符数组存储字符串时,要特别注意’\0’,要为’\0’留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1。例如:
char str[7] = "abc123";
  • "abc123"看起来只包含了 6 个字符,我们却将 str 的长度定义为 7,就是为了能够容纳最后的’\0’。如果将 str 的长度定义为 6,它就无法容纳’\0’了。
字符串长度
  • 所谓字符串长度,就是字符串包含了多少个字符(不包括最后的结束符’\0’)。
  • 在 C 语言中,我们使用 string.h 头文件中的 strlen() 函数来求字符串的长度,它的用法为:
    length strlen(strname);

strname 是字符串的名字,或者字符数组的名字;length 是使用 strlen() 后得到的字符串长度,是一个整数。

四、C语言字符串处理函数

字符串连接函数strcat()

strcat是string catenate的缩写,意思是把两个字符串拼接在一起,语法格式为:

strcat(arrayName1, arrayName2);
  • arrayName1、arrayName2 为需要拼接的字符串。
  • strcat() 将把 arrayName2 连接到 arrayName1 后面,并删除原来 arrayName1 最后的结束标志’\0’。
  • 这意味着,arrayName1 必须足够长,要能够同时容纳 arrayName1 和 arrayName2,否则会越界(超出范围)。
  • strcat() 的返回值为 arrayName1 的地址。
字符串复制函数strcpy()

strcpy 是 string copy 的缩写,意思是字符串复制,也即将字符串从一个地方复制到另外一个地方,语法格式为:

strcpy(arrayName1, arrayName2);
  • strcpy() 会把 arrayName2 中的字符串拷贝到 arrayName1 中,字符串结束标志’\0’也一同拷贝。
  • strcpy() 要求 arrayName1 要有足够的长度,否则不能全部装入所拷贝的字符串。
字符串比较函数strcmp()

strcmp 是 string compare 的缩写,意思是字符串比较,语法格式为:

strcmp(arrayName1, arrayName2);
  • arrayName1 和 arrayName2 是需要比较的两个字符串。
  • 字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。
  • 返回值:若 arrayName1 和 arrayName2 相同,则返回 0;若 arrayName1 大于arrayName2,则返回大于 0 的值;若 arrayName1 小于 arrayName2,则返回小于 0 的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值