【C语言从零到入门】第十二节 数组与字符串

一、数组

数组即有序的元素序列。

在C语言中,数组可以看作是基本数据类型的有序集合

一)数组的基本使用

1、数组的声明

类型 变量名[数组长度];

例如:

int a[4]; 
2、数组的赋值
a. 先声明,再赋值

变量名 = {数据1, 数据2, 数据3…}

例如:

int a[4];

a = {1, 2, 3, 4};
b. 声明数组同时赋值

类型 变量名[数组长度] = {数据1, 数据2, 数据3…};

采取这种方式赋值的数组可以省略数组长度。

例如:

int a[4] = {1, 2, 3, 4};

int b[] = {1, 2, 3, 4}; //省略了数组长度

c. 先声明,再使用数组下标进行赋值

请见下面的“数组元素的使用”

3、数组元素的使用

使用数组中的元素,代码格式为:

变量名[数组下标]

  • 数组下标即元素在数组中的位置
  • C语言中的数组下标是从0开始的,所以数组的第一个元素是 a[0]

例如:

int a[] = {1, 2, 3, 4};

printf("%d", a[2]); // 输出3

// 因为数组下标是从0开始的,所以a[2]代表了数组a的第3个元素,即“3”

我们还可以为数组元素重新赋值:

int a[] = {1, 2, 3, 4};

printf("%d", a[2]); 

a[2] = 6;

printf("%d", a[2]);  // 输出6

所以,我们找到了另一种为数组元素赋值的方式:

int a[4];

a[0] = 1;

a[1] = 2;

a[2] = 3;

a[3] = 4;

二)说明

1. 数组的长度
  • 数组的长度在声明的时候已经确定,不能更改。如果使用数组元素时,数组下标超过了数组的长度,会发生数组越界,造成程序的崩溃,一定要注意。
  • 类似于 int a[] = {1, 2, 3, 4} ,即使我们没有直接定义数组的长度,但系统也已经确定了数组的长度。
2.数组的默认值

如果我们没有为数组元素赋值,那么它的默认值就是0;

int a[4];
printf("%d\n", a[0]); // 输出0
printf("%d\n", a[1]); // 输出0
printf("%d\n", a[2]); // 输出0
printf("%d\n", a[3]); // 输出0

建议记住这个特性,可能会用到。

3.数组占用的空间

数组占用空间 = 数组长度 x 对应数据类型占用的空间

我们可以用 sizeof()函数获取数据占用的字节数

例如:

#include<stdio.h>

void main()
{
	printf("%d\n", sizeof(int)); // 输出4
    int a[4];
    printf("%d\n", sizeof(a)); // 输出16
}

所以,根据数组占用空间的计算公式,我们可以推算数组长度的公式:

数组长度 = 数组占用空间 ÷ 对应数据类型占用的空间

#include<stdio.h>

void main()
{
	int a[4] = {1, 2, 3, 4};
	printf("数组a的长度为 %d", sizeof(a) / sizeof(int));  // 输出4
}

二、二维数组与多维数组

一)二维数组

二维数组可以看作是数组的数组。常用来表示矩阵。

1、二维数组的声明

数组类型 变量名[行数][列数];

int a[3][2]; // 声明一个3行2列的数组, 声明时不能省略行和列长度
2、二维数组的赋值
a. 直接赋值
int a[][2] = {{1,2}, {3,4}, {5,6}}; //直接赋值时可以省略行的长度
int b[][2] = {1,2,3,4,5,6}; // 计算机会自动根据列的长度将其分为二维数组
b. 间接赋值

参考“二维数组的使用”

3、二维数组的使用

变量名[行数][列数]

二维数组也是数组,所有它的第一个元素是[0][0]。

int a[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}}; // 为了便于观看,经常将二维数组写成这种形式

printf("%d", a[2][1]); // 输出8

二)多维数组

三维及以上的数组称为多维数组。

如:

  • 三维数组可以看作二维数组的数组
  • 四维数组可以看作三维数组的数组

多维数组声明和使用遵循着从高维到低维的顺序.

例:

int a[4][3][2];  // 4个”3行2列”的二维数组

a[2][2][1] = 6; // 第3个数组的“第3行第2列”的值为6

三、字符串

字符串即一串字符,它可以看作是特殊的字符数组。

1、字符串的声明

a. 与字符数组相同
b. 可以用 char *变量名 表示

例如:

char a[4];
char *b;

2、字符串的赋值

a. 使用双引号
b. 与字符数组相同

例如:

// 使用双引号
char *a = "Hello C"; 
char b[] = "Hello C";


// 字符数组的方式
char c[] = {'H', 'E', 'L', 'L', 'O'}; 

char c[3];
c[0] = 'B';
c[1] = 'O';
c[2] = 'Y';

char d[4];
d = "girl";

char *e;
e = {'a', 'b', 'c'};

3、说明:

  • 字符串的末尾是’\0’

  • '\0’只是一个标志,它并不占用字符串的长度

  • 计算机会根据 ‘\0’ 来判断一个字符串的长度并输出它

#include<stdio.h>

void main()
{
	char a[] = {'H', 'E', 'L', '\0', 'L', 'O'};
	printf("%s", a); 
}

猜猜上面的程序会输出什么?

没错,它输出的是 “HEL”。在遇到“\0”的时候,计算机把它当作了字符串的结尾,所以不会再输出“\0”后面的字符。

我们可以利用 strlen() 函数获取字符串的长度。

试着运行下面的程序,观察它的输出,并想一想为什么。

#include<stdio.h>

void main()
{
	char a[] = {'H', 'E', 'L', '\0', 'L', 'O'};
	printf("字符串长度:%d\n", strlen(a)); 
	printf("数组占用空间:%d字节\n", sizeof(a));
	printf("数组的长度:%d\n", sizeof(a) / sizeof(char));
}

4、获取输入的字符串

可以利用gets()函数获取输入的字符串:

#include<stdio.h>

void main()
{
	char a[20];  // 注意,这里不能使用 char *a, 而且必须指定字符串的长度, 这个长度代表了输入的最大长度
	gets(a);
	printf("你输入的是: %s", a); 
}

小练习

输入5个整数,将它们存入数组,并倒序输出这5个整数。










参考答案

#include<stdio.h>

void main()
{
	int a[5];  // 声明一个长度为5的数组
	
	for(int i = 0; i < 5; i++)  // 这时i的取值分别为 0,1,2,3,4 
		scanf("%d", &a[i]);	    // i正好对应了1-5号元素的下标 
	
	for(int i = 5; i > 0; i--)   // 这时i的取值分别为 5,4,3,2,1 
		printf("%d\n", a[i-1]);  // i-1 的值正好对应了5-1号元素的下标 
}

好了,文章到这里就结束了,我们下一节再见

点击查看更多【C语言从零到入门】系列

每周五晚20:00更新

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值