首页 > 其他分享 >二维数组作函数参数的三种方式

二维数组作函数参数的三种方式

时间:2024-12-26 20:59:13浏览次数:3  
标签:cout int void 函数参数 二维 数组 指针

二维数组作函数参数的三种方式

前言

二维数组作函数参数的本质都是传递数组的首地址,但是具体的写法有3种,例子如下:

  1. void work1(int [][C])
  2. void work2(int (*)[C])
  3. void work3(int *)

讲解

第一种和第二种都可以自动计算索引,也就是可以使用下标[]去访问数组,而第三种不可以。

第一种

最基本的方法,无需多说,要注意的就是形参名第一维的长度不需指定,但第二维的长度必须指定。

第二种

该方法是通过传递二维数组的行指针实现的,定义行指针的方式如下:

int (*p)[3]

要是不懂的话(懂得二维数组的行指针和列指针)自己去工具书里重修一下或者去其他地方搜。

第三种

这就是直接当一维数组传一个指针了。

代码

直接看代码,就明白了!

#include <bits/stdc++.h>
#define R 3
#define C 4
using namespace std;

void work1(int [][C]); // 声明方式,形参名称可省略
void work2(int (*)[C]); // 声明方式,形参名称可省略 
void work3(int *); // 声明方式,形参名称可省略 

int main() {
	int arr[R][C];
	for (int i=0, x=1; i < R; i++) { // 二维数组初始化 
		for (int j=0; j < C; j++, x++) {
			arr[i][j] = x;
		} 
	}
	cout << "二维数组:" << endl;
	for (int i=0; i < R; i++) {
		for (int j=0; j < C; j++) {
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;

	work1(arr);
	work2(arr);
	work3((int *)arr);

	return 0;
}

void work1(int a[][C]) { // 使用下标进行二维数组传参(常规做法) 
	cout << "使用下标进行二维数组传参" << endl;
	cout << "a[1][3] = " << a[1][3] << endl;
	cout << "*(*(a + 1) + 3) = " << *(*(a + 1) + 3) << endl << endl;
}

void work2(int (*p)[C]) { // 使用行指针(二维)进行二维数组传参 
	cout << "用行指针(二维)进行二维数组传参" << endl;
	cout << "p[1][3] = " << p[1][3] << endl;
	cout << "*(*(p + 1) + 3) = " << *(*(p + 1) + 3) << endl << endl;
}

void work3(int *p) { // 使用指针(一维)进行二维数组传参 
	cout << "使用指针(一维)进行二维数组传参" << endl;
//	cout << "p[1][3] = " << p[1][3] << endl; // 不能这么写了 
	cout << "p[7] = " << p[7] << endl;
//	cout << "*(*(p + 1) + 3) = " << *(*(p + 1) + 3) << endl; // 不能这么写了
	cout << "*(p + 7) = " << *(p + 7) << endl << endl;
}

输出:

输出

结语

这一部分容易混淆,建议多学习多思考多实践(自己敲敲三种实现方式的代码)。

标签:cout,int,void,函数参数,二维,数组,指针
From: https://blog.csdn.net/m0_62568363/article/details/144745170

相关文章

  • Java识别图片二维码
    方法一:ZXing使用ZXing识别,可以返回二维码识别内容,还可以找到二维码的位置坐标。1、引入依赖implementationgroup:'com.google.zxing',name:'core',version:'3.5.3'implementationgroup:'com.google.zxing',name:'javase',version:�......
  • 二维数组 手动排序
    <template><div><el-dialogv-bind="$attrs"v-on="$listeners"@open="onOpen"@close="onClose":title="title"width="800px">......
  • LeetCode 2605 从两个数字数组里生成最小数字
    探寻两个数组数位关联下的最小数字问题题目描述给定两个只包含1到9之间数字的数组 nums1 和 nums2,并且每个数组中的元素都是互不相同的。我们需要返回最小的数字,要求这个数字满足两个数组都至少包含这个数字的某个数位。例如,若 nums1=[4,1,3],nums2=[5,7],那么......
  • 学习threejs,THREE.RingGeometry 二维平面圆环几何体
    ......
  • 写一个js方法将字符串数组与数字数组互转
    在前端开发中,有时需要将字符串数组转换为数字数组,或者将数字数组转换为字符串数组。以下是一个简单的JavaScript方法,用于实现这两种转换://将字符串数组转换为数字数组functionstringArrayToNumberArray(stringArray){returnstringArray.map(item=>{constnumber=......
  • JavaScript中的数组和函数在内存分别是如何存储的?
    在JavaScript中,数组和函数在内存中的存储方式涉及到JavaScript的内存管理机制,特别是堆(Heap)和栈(Stack)的使用。虽然这些概念在底层实现上可能因JavaScript引擎(如V8,SpiderMonkey等)的不同而有所差异,但我们可以从一个高层次的视角来理解它们。1.数组在内存中的存储数组在JavaScript......
  • LeetCode 209. 长度最小的子数组 (C++实现)
    1.题目描述给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的子数组[numsl,numsl+1,…,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。示例1:输入:target=7,nums=[2,3,1,2,4,3]......
  • 【C/C++】字符数组和string字符串:从C语言到C++的演变
    字符数组和string字符串:从C语言到C++的演变在C语言和C++的编程中,字符数组和字符串(string)是非常重要的基础数据类型。它们在实际编程中常用于存储和操作文本数据,但是这两种类型的处理方式有所不同。在这篇博客中,我们将详细讲解字符数组和string字符串,从C语言的字符数组到C++......
  • 数组移除元素
    27.移除元素-力扣(LeetCode)26.删除有序数组中的重复项-力扣(LeetCode)283.移动零(opensnewwindow)844.比较含退格的字符串(opensnewwindow)977.有序数组的平方(opensnewwindow)暴力枚举intremoveElement(vector<int>&nums,intval){ intlen=nums.size();......
  • 数组和对象合并
    1.数组合并:在JavaScript中,concat方法用于连接两个或多个数组,并返回一个新数组。这不会改变现有的数组,而是返回一个包含了连接元素的新数组letarray1=[1,2,3];letarray2=[4,5];letarray3=array1.concat(array2);console.log(array3);//输出:[1,2,3,4,5]解......