广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言之关于二维数组在函数中的调用问题
  • 805
分享到

C语言之关于二维数组在函数中的调用问题

2024-04-02 19:04:59 805人浏览 泡泡鱼
摘要

目录关于二维数组在函数中的调用问题函数调用二维数组 二维数组如何放到函数中使用下面以一个二维矩阵的转置为例关于二维数组在函数中的调用问题 之前在学习二维数组的时候感觉理解起

关于二维数组在函数中的调用问题

之前在学习二维数组的时候感觉理解起来很简单,所以理解一下就过去了,但是当自己真正的去用二维数组数组解决一些问题(特别是在函数调用二维数组的过程中)才真正发现原来使用起来还是要去注意一些细节的。废话不多说,直接上干货!

函数调用二维数组

在函数中调用二维数组的具体格式如下:

1、声明:这是声明的两种格式,在这里定义的是一个N*5的二维字符数组,各位看官一定要注意,在声明的过程中可是要将二维数组中第二个长度参数进行标明的呀。

2、定义:和声明的格式没有什么大的区别,只不过是要如果要采用第二种声明方式的话要在定义时补充完整形参名

3、如果要去在函数中只使用二维数组中的其中一个一维数组时

我的个人做法是正常的在函数声明中正常定义一个二维数组,之后再在函数申明中额外添加一个整数参数去来限定在函数中使用二维数组中具体哪一个一维数组,例子如下:

所写这个函数是为了去分别算出这个二维数组中的每一个一维数组的平均值,所以我在定义函数时加了一个n来表示我要算哪一个一维数组的平均值。

4、在结构体中千万不要去使用二维数组!!!

当初我在写结构体是想当然的去使用了二维数组,结果。。。

如果在使用结构体的过程中需要用到类似于二维数组的储存数据的特性时,我们应当去选取用结构体数组来解决相应的问题。结构体数组相当一二维数组的一维数组,结构体中所定义的一些信息精细化相当于二维数组中一维数组的信息。

好了,这就是我这个小白中的小白在实际使用的过程中所出现的一些情况。

 二维数组如何放到函数中使用

要想在函数中带入一个二维数组

前提首先我们要知道二维数组在内存中是如何分布的

假设定义一个二维数组 arr[3][3];

内存中的是这样储存的:

图解:

也就是说,二维数组的内存关系是连续的,因此如果我们在函数中带入一个数组只需要数组的第一排的第一个元素的地址和行数和列数三个条件

下面以一个二维矩阵的转置为例

关键点是如何利用二维数组的第一排首元素的地址去把整个数组表示出来

假设:

数组 int arr[3][3];

arr的值为第一排首元素地址

已知行列数为3,令int *p=arr;

可以用 *(p+i*3+j)表示第i排第j列的元素

因此函数只需要定义一个接收数组第一排首地址元素的指针类型的形参即可

下面见完整代码: 

#include<stdio.h>
#include<windows.h>
void Array_transpose(int *arr, int rank)//rank为数组的列数  代表每排有多少个元素
{
	int i;
	int j;
	int temp;//temporary 临时的
	for (i = 0; i < rank; i++)
	{
		for (j = 0; j < i; j++)
		{
			//交换沿着对角线对称的两个数的值
			//交换方法一
			
			
			//交换方法二
			 *(arr + j * rank + i)=*(arr + j * rank + i)^*(arr + i * rank + j);
			 *(arr + i * rank + j)=*(arr + j * rank + i)^*(arr + i * rank + j);
			 *(arr + j * rank + i)=*(arr + j * rank + i)^*(arr + i * rank + j);
 
			//交换方法三
			
		}
	}
}
//配图解:

 
int main()
{
	int a[5][5]=
	{
		0,0,1,0,0,
		0,0,1,0,0,
		0,0,1,0,0,
		0,0,1,0,0,
		0,0,1,0,0
 
	};
	int i, j,s;
	
	Array_transpose(a, 5);
 
		for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)
		{
			//	 sizeof(a)/sizeof(a[0])得数组的有多少排
			for (j = 0; j < sizeof(a[0])/ sizeof(a[0][0]); j++)
 			//	 sizeof(a[0])/ sizeof(a[0][0])得到的是第一排的元素个数
			{
				if (a[i][j])
					printf("▇");
				else
				{
					printf("  ");
				}
			}
			printf("\n");
		}
	
	system("pause");
	return 0;
}

代码实现的功能:

不使用Array_transpose()

原本输出应该是这样

使用Array_transpose()

转置后

利用代码中的方法可以实现二维数组的转置,可以作为俄罗斯方块的色块变化方向的基础

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: C语言之关于二维数组在函数中的调用问题

本文链接: https://www.lsjlt.com/news/164152.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言之关于二维数组在函数中的调用问题
    目录关于二维数组在函数中的调用问题函数调用二维数组 二维数组如何放到函数中使用下面以一个二维矩阵的转置为例关于二维数组在函数中的调用问题 之前在学习二维数组的时候感觉理解起...
    99+
    2022-11-13
  • 关于C语言一维数组算法问题详解
    目录问题1:将数组中的数逆序存放问题2:求数组中最大值及其下标问题3:找出不是两个数组的共有元素问题4:找出出现次数最多的数问题5:数组中插入数字并排序问题6:数组循环右移问题总结问...
    99+
    2022-11-12
  • C语言算法练习之求二维数组最值问题
    目录一、问题描述二、算法实例编译环境三、算法实例实现过程3.1、包含头文件3.2、定义宏和声明数组3.3、声明相关变量3.4、输入数组(方阵)的阶3.5、输出 “输入的数...
    99+
    2022-11-13
  • C语言中关于scanf函数的一些问题详解
    在学习创建二叉树时遇到了scanf的一些问题,在此记录下来 创建根节点A后理想情况是输入A的左子树,若不为空继续创建左子树,但输入A后发现重复创建了一个左子树,测试后发现输入A换行...
    99+
    2022-11-12
  • C语言中关于库函数 qsort 快排的用法
    目录前言一、库函数(qsort)的含义二、(qsort)函数的实现方式,话不多说,请看。1. 第一个参数2. 第二个参数3. 第三个参数4. 第四个参数1). 函数的参数2). 这第...
    99+
    2022-11-12
  • 怎么在c语言中使用二分法查找数组中的元素
    今天就跟大家聊聊有关怎么在c语言中使用二分法查找数组中的元素,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。c语言二分法实现查找数组元素的方法:递归算法#include<stdi...
    99+
    2023-06-14
  • 在 Windows 上使用 Go 语言编写二维码函数,你需要知道的关键信息。
    随着智能手机的普及,二维码已经成为了一种非常流行的信息传递方式。在许多场景中,我们都需要生成和解析二维码。而 Go 语言作为一种简洁、高效的编程语言,也提供了丰富的库来方便我们完成这些任务。在本文中,我们将探讨如何在 Windows 上使...
    99+
    2023-10-03
    windows 二维码 函数
  • 在Go语言中,如何使用关键字来实现高效的数组存储和访问?
    在Go语言中,数组是一种非常常见的数据结构,它可以存储相同数据类型的元素,并且可以通过索引来访问这些元素。在本文中,我们将介绍如何使用关键字来实现高效的数组存储和访问。 首先,让我们来看一下如何定义和初始化一个数组。在Go语言中,可以使用以...
    99+
    2023-09-23
    关键字 存储 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作