【C语言】帮你解决c语言中数组的问题

本文详细介绍了C语言中的数组,包括一维数组的创建、初始化、使用及内存存储,二维数组的创建、初始化、使用及内存布局,以及数组作为函数参数的传递方式。通过实例演示了三子棋和扫雷游戏的实现,帮助读者深入理解数组的运用。
摘要由CSDN通过智能技术生成

之前一直也没注意怎么写博客想着就是自己的笔记,最近总看大佬的博客着实感到羞愧不已,以后就算几个月写一篇文章都行就是不水文章。
请添加图片描述

🦚1.一维数组的创建和初始化

数组是一组相同类型元素的集合。数组的创建方式:

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

那么在程序中语法怎么实现呢?

    int arr[8];
	char ch[3];
	
	//下面是整形数组
	int arr2[] = {
    0, 1, 2, 3 };//等同于下面写法,如果不在[]中写数字默认最大为后面个数
	int arr3[4] = {
    0, 1, 2 ,3};
	
	//下面字符数组
	char ch1[5] = {
    'j', 'j','y' };//数组中元素为  'j', 'j','y' ,'\0','\0'
	char ch2[] = {
    'j', 'j','y' };//数组中元素为 'j', 'j','y'
	char ch3[5] = "jjy";//数组中元素为  'j', 'j','y','\0','\0'
	char ch4[] = "jjy";//数组中元素为 'j', 'j','y','\0'
    printf("%d\n" , strlen(ch2));//打印出 随机值
    printf("%d\n" , strlen(ch4));//打印出 3

注意写法不同结果不一样 char ch2[] = { ‘j’, ‘j’,‘y’ }; 这种写法后面元素是随机的
在这里插入图片描述

注意下面这种写法是不被允许的

     int n = 8;
	int arr[n]; //[]中插入的必须是常量    但是c99以上的编译器支持

数组初始化

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

    int arr4[4] = {
   0, 1, 2, 3};//完全初始化
	int arr5[4] = {
    0, 1, 2 };//不完全初始化

🦚2.一维数组的使用

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

//该代码实现输出数组中全部数
	int arr[10] = {
    0 };
	arr[3] = 3;
    int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]); //sizeof(arr)整个数组大小本题中4*10  sizeof(arr[0])其中一个数组大小本题中为4
	for (i = 0; i < sz; i++)
	{
   
		printf("%d", arr[i]);
	}
    //该代码实现输出数组中全部数
    int arr[10] = {
   1,2,3,4,5,6,7,8,9,10};
	int* p = arr;//数组名是数组首元素的地址
	int i = 0;
	for (i = 0; i < 10; i++)
	{
   
		printf("%d ", *p);
		p++;
	}

总结
数组元素下标默认从0开始
数组元素可以通过计算得到

🦚3.一维数组在内存中的存储

int arr[10] = {
    0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
   
		printf("&arr[%d] = %p\n", i, &arr[i]);
	}

在这里插入图片描述
由此得出结论

1.一维数组在内存中是连续存放的!
2.随着数组下标的增长,地址是由低到高变化的!

🦚4.二维数组的创建和初始化

二维数组的创建

	int arr[3][4];
	char arr1[3][4];
	double arr2[3][4];

在这里插入图片描述
二维数组的初始化

//初始化
	int arr[3][4] = {
   1,2,3,4,5,6,7,8,9,10.11,12};
	int arr1[3][4] = {
    1,2,4,5,6,7,8 };
	int arr2[3][4] = {
    {
   1,2}, {
   3,4},{
   5,6} };
	int arr3[][4] = {
    {
   1.2}, {
   3,4},{
   5,6} };//根据一行中有多少元素来决定的,对于本代码等同于arr2[3][4]

如下是二维数组在内存中的排列
在这里插入图片描述

注意下面有 错误写法

    int arr4[3][]= {
    {
   1.2}, {
   3,4},{
   5,6} };//第二个数组位置不写不可以
	int arr5[][] = {
    {
   1.2}, {
   3,4},{
   5,6} };//这种写法不可以

🦚5.二维数组的使用

二维数组可以通过下标来获取么?
下图是二维数组的对应数组下标
arr[行号][列号]
在这里插入图片描述

以下代码遍历二维数组

	int arr4[3][4] = {
    {
   1,2}, {
   3,4} , {
    5,6} };

	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
   
		for (j = 0; j < 4; j++)
		{
   
			printf("%d ", arr4[i][j]);
		}
		printf("\n");

	}

在这里插入图片描述

🦚6.二维数组在内存中的存储

二维数组在内存中也是连续存放
一行内部连续,跨行也是内部连续
二维数组实际上内存中是这样的
在这里插入图片描述
证明二维数组是连续的:

int arr4[3][4] = {
    {
   1,2}, {
   3,4} , {
    5,6} };
	int* p = &arr4[0][0];
	int i = 0;
	for (i = 0; i < 12; i
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂暴于涛侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值