【C语言初阶】数组(超详解)

这篇具有很好参考价值的文章主要介绍了【C语言初阶】数组(超详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.一维数组

1.1 一维数组的创建

数组是一组相同类型元素的集合(数组表示的是类型相同的一组数据)

数组的创建方式:

type_t arr_name [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小

int arr[5];
int arr2[3 + 2];
char arr3[8];

数组,C语言成长之路----初级篇,开发语言,c语言

  • 数组创建,在C99标准之前, [ ] 中要给一个常量才可以,不能使用变量。
  • C99 标准中,加入了变长数组的概念
  • 数组的大小允许使用变量来指定,但是数组的大小一旦确定后,是不能再变化的
  • 变长数组是不能初始化的
  • VS2019,2022环境中不支持C99中的变长数组

1.2 数组的初始化

数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。

看代码:

	int arr1[10] = { 1,2,3 };//不完全初始化,剩余元素默认初始化为0
	int arr2[5] = { 1,2,3,4,5 };//完全初始化
	int arr3[3] = { 'a',98,'c' };//98为ASCII值
	int arr4[0] = { 0 }//错误数组大小不能为零
	char arr6[] = "abcdef";//字符串初始化含\0
	char arr7[] = { 'a','b','c' };//不含、0

1.3 一维数组的使用

对于数组的使用我们之前介绍了一个操作符: [ ] ,下标引用操作符。它其实就数组访问的操作符。

我们来看代码:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	              //0 1 2 3 4 5 6 7 8 9
	printf("%d", arr[7]);
	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组大小
	int i = 0;
	printf("\n");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);//表示从1~10
	}
	printf("\n");
	for (i = 0; i < sz; i++)
	{
		printf("%d ", 10-i);//表示从10~1
	}
	return 0;
}

运行结果:
数组,C语言成长之路----初级篇,开发语言,c语言
总结:

  1. 数组是使用下标来访问的,下标是从0开始。
  2. 数组的大小可以通过计算得到。

1.4 一维数组在内存中的储存

数组,C语言成长之路----初级篇,开发语言,c语言
数组,C语言成长之路----初级篇,开发语言,c语言
注:

  • 数组在内存中存放是连续的
  • 随着下标的增长,地址是由低到高变化的
    数组,C语言成长之路----初级篇,开发语言,c语言

2. 二维数组

2.1 二维数组的创建

int arr[3][4];
char arr[3][5];
double arr[2][4];

2.2 二维数组的初始化

	int arr1[3][5] = { {1,2,3,4,5},{1,2,3,4,5} ,{1,2,3,4,5} };//完全初始化
	int arr2[3][5] = { 0 };//不完全初始化
	int arr3[][5] = { {1,2,3},{5,5},{6,7,8,9} };
	int arr4[][] = { 0 };//二维数组如果有初始化,行可以省略,列不能省略
	int arr5[0][5] = { 0 };//数组的大小必须大于零

补:
数组,C语言成长之路----初级篇,开发语言,c语言

2.3 二维数组的使用

二维数组的使用也是通过下标的方式。

看代码:

int main()
{
	int arr[3][5] = { {1,2,3},{5,5},{6,7,8,9} };
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
			printf("%d ", arr[i][j]);
		printf("\n");
	}
	return 0;
}

运行结果:
数组,C语言成长之路----初级篇,开发语言,c语言

2.4 二维数组在内存中的储存

像一维数组一样,这里我们尝试打印二维数组的每个元素
数组,C语言成长之路----初级篇,开发语言,c语言
数组,C语言成长之路----初级篇,开发语言,c语言
数组,C语言成长之路----初级篇,开发语言,c语言

3.数组越界

数组的下标是有范围限制的。
数组的下标规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1,所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以程序员写代码时,最好自己做越界的检查。
数组,C语言成长之路----初级篇,开发语言,c语言
补:二维数组也可能存在越界

4.数组作为函数参数

往往我们在写代码的时候,会将数组作为参数传给函数,比如:我要实现一个冒泡排序(这里要讲算法思想)函数

将一个整形数组排序,那我们将会这样使用该函数:
补充:(冒泡排序原理如下:)
数组,C语言成长之路----初级篇,开发语言,c语言

4.1 冒泡排序函数错误设计

void Bubble_sort(int arr[])//本质arr[]指针
{
	int i = 0;
	int j = 0; 
	int sz = sizeof(arr) / sizeof(arr[0]);//sz=1
	for (i = 0; i < sz; i++)
	{
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
int main()
{
	int arr[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
	int i = 0;
	Bubble_sort(arr);//首元素地址,见下数组名分析
	for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

数组,C语言成长之路----初级篇,开发语言,c语言

4.2 数组名是什么

数组名就是地址,通常来说:数组名是数组首元素的地址
数组,C语言成长之路----初级篇,开发语言,c语言
但有两个例外
1, sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节数组,C语言成长之路----初级篇,开发语言,c语言
2, &数组名,这里的数组名表示整个数组,取出的是整个数组的地址
数组,C语言成长之路----初级篇,开发语言,c语言
除此之外,所有遇到的数组名都是数组首元素的地址

4.3 冒泡排序函数的正确设计

//void Bubble_sort(int *arr, int sz)
void Bubble_sort(int arr[],int sz)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < sz; i++)
	{
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
int main()
{
	int arr[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
	int i;
	int sz = sizeof(arr) / sizeof(arr[0]);
	Bubble_sort(arr,sz);//arr首元素地址代表数组
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果:
数组,C语言成长之路----初级篇,开发语言,c语言

.文章来源地址https://www.toymoban.com/news/detail-717855.html

到了这里,关于【C语言初阶】数组(超详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 告别过去,拥抱未来:一个Java开发者的成长之路

    时光飞逝,不知不觉已经到了大四毕业的时候。回顾这四年的学生生涯,Java开发是让我最为热爱和投入的一部分。在这里,我想和大家分享我在Java开发方面的收获、经验和感悟,同时也向过去的自己告别,迎接未来的挑战。 在大一的时候,我们学习了Java编程基础,当时我并

    2024年02月08日
    浏览(58)
  • 初阶C语言-数组

    “少年没有偏旁,自己便是华章!” 今天我们继续一起来学习一下数组的相关知识点。 什么是数组呢? 数组是一组相同类型元素的集合。 数组的初始化是指:在创建数组的同时给数组的内容一些合理初始值(初始化)。 这里,我们要区分以下用字符给数组初始化和用字符

    2024年02月14日
    浏览(37)
  • 【初阶C语言】数组

    目录 一、一维数组 1.一维数组的创建和初始化 2.一维数组的使用 3.一维数组在内存中的存储 二、二维数组 1.二维数组的创建 2.二维数组的初始化 3.二维数组的使用 4.二维数组在内存中的存储 三、数组的越界问题 四、数组传参 前言:  数组在C语言中是一个比较重要的知识点

    2024年02月14日
    浏览(41)
  • 【C语言初阶(五)】数组

    ❣博主主页: 33的博客❣ ▶文章专栏分类: C语言从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 前面我们已经学习了分支和循环,这篇文章我们一起来学习新的知识—数组,数组是一个十分常见的知识,接下来就一起进入数组的学习吧! 本章重点 本篇文章主要介绍数组的

    2024年03月22日
    浏览(31)
  • 『C语言初阶』第五章-数组

    🔥 博客主页 : 小羊失眠啦. 🔖 系列专栏 : C语言 🌥️ 每日语录 : 不怕路长,只怕志短。 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 数组是一组相同类型元素的集合 ,但我们需要创建多个相同类型的变量时,只需要创建一个类型的数组,就相当于同时创建很多相同类型的变

    2024年02月14日
    浏览(43)
  • 【C语言初阶】指针数组or数组指针!又被这些命名搞蒙了?

    🎬 鸽芷咕 : 个人主页  🔥 个人专栏 : 《C语言进阶篇》 《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面我们已经把指针大部分内容给学完了,今天就给大家带来数组指针or指针数组!    ⛳️ 很多说这俩名字不是差不

    2024年02月16日
    浏览(37)
  • 【C语言初阶】指针的运算or数组与指针的关系你了解吗?

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面给大大家介绍了指针的基础知识。那么这一章就来给大家介绍下一部分内容!    ⛳️ 指针的运算 以及 数组与指

    2024年02月16日
    浏览(34)
  • 【C语言初阶(八)】初阶指针详解

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 我们在介绍C语言时已经给大家介绍过指针的概念以及内存地址的概念了,这里我们就不再重复说明前面的内容,对指针毫无了解的

    2024年02月09日
    浏览(45)
  • C语言——指针详解(初阶)

    在C语言学习过程中,指针算一个难点。我总结所学的指针知识,写一篇博客,希望大家对指针的知识理解的更通透。 每个内存都有一个唯一的编号,这个编号也被称为地址,C语言创建变量。都要在内存上开辟空间。 编号= = 地址 = =指针 我们可以通过(取地址操作符)取出变

    2024年02月16日
    浏览(36)
  • 中文编程开发语言工具系统化教程初级1上线

    中文编程系统化教程初级1 学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法 可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,通过对成百上千个实例练习,则很快会成为编程 高手。

    2024年02月08日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包