专业编程基础技术教程

网站首页 > 基础教程 正文

这篇文章能让你理解读懂C语言中的一维数组,二维数组,字符数组

ccvgpt 2024-11-12 09:57:10 基础教程 9 ℃

在写C语言代码的时候,在很多开发场景中数组的使用非常频繁。既然重要,首先得知道数组的定义和用法了。

数组

这篇文章能让你理解读懂C语言中的一维数组,二维数组,字符数组

数组:

当我们在定义数组的时候,要注意数组中这个[]中括号,[]里面的值不能是一个变量,[]只能为常量。

使用数组:

当使用数组时,数组中的[]中括号里面的值可以是常量也可以为变量。数值数组不能整体操作,而且数组的每一个元素都是变量,可以被改变赋值;如果数组只初始化部分元素,其他元素被初始化为0; # 备注:如果定义时,[]中括号里面没有值,这个数组的元素个数由{}大括号里面的元素个数来决定;比如来看下面一段代码演示:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void test() {
	int arr[] = { 1,2,3,4,5 };
	int num = 0;
	while (num < 10) {
		printf("Num = %d\n", arr[num]);
		num++;
	}
}

int main() {
	test();
	return 0;
}

结果图为:

当拿到数组,如何了解数据在内存中的地址?

可以这么解释为数据在内存中的地址,就是它在内存中的起始地址。比如定义一个数组 int arr[5];

如何知道int arr[5]代表着什么意思?

其中arr[0]就代表第0个元素,而前面加上&引用符号 &arr[0] 代表的是第0个元素的地址(也称为首元素地址);arr为数组名,代表数组,也代表第0个元素的地址。

用关系表示:arr == &arr[0];所以说数组名就是一个常量(不能被赋值),也是一个地址。

注意区分:

&arr[0]+1 或&arr[0]+2 代表的是第0个元素的地址加1跨过一个元素,或加2跨过两个元素;

arr+1 或 arr+2 代表的是第0个元素的地址加1跨过一个元素,或加2跨过两个元素;

&arr+1 代表的是整个数组的地址加1跨过整个数组;

二维数组

二维数组:

在定义二维数组时,有个注意的地方:不能省略列的下标,但可以省略行的下标。

比如这个二维数组:int arr[4][5];

注意区分:

arr[0][0]:代表的是第0行的第0个元素;

&arr[0][0]:代表的是第0行的第0个元素的地址;

arr[0]:代表的是第0行一维数组的数组名;

&arr[0]:代表的是第0行的地址;

arr:代表的是二维数组的数组名(代表二维数组),同时也代表首行地址;

&arr: 代表的是二维数组的地址;

关系则表示:

&arr[0][0]+1:代表的是第0行第0个元素地址加1跨过一个元素;

arr[0]+1:代表的是第0行的元素地址加1跨过一个元素;

&arr[0]+1:代表的是第0行的地址加1,跨过一行;

arr+1:代表的是首行地址加1,跨过一行;

&arr+1:代表的是二维数组地址加1,跨过整个数组。

字符数组

字符数组:

首先先了解下什么是数值数组 和 字符数组?

1、数值数组:int arr[5] 每 个元素int类型;

2、字符数组:char arr[5] 每个元素是char类型;

谈到字符数组一般都会想到字符串,它们的区别是:

字符串:字符数组中有\0字符的数组称为字符串,加之,有\0字符的字符数组操作起来也较方便。

字符数组:如果字符数组中含有\0的字符,也是字符串;

接下来用sfgets和fputs进行输入输出用代码方式演示下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char number[1024] = "";
	// 也可以用scanf方式从键盘获取一个字符串,遇到\n结束;
	/*scanf("%s", number);
	printf("%s\n", number);*/
	// 输入输出操作
	fgets(number, sizeof(number), stdin);
	number[strlen(number) - 1] = 0;
	printf("%s\n", number);
	fputs(number, stdout); 
	printf("\n");
	return 0;
}

最近发表
标签列表