C++基础知识——二维数组做函数参数

1.确定大小的二维数组

void Func(int array[3][10]);

void Func(int array[][10]);

2.不确定大小的二维数组转为二维指针:

从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,所以可以转换成二维指针。

void Func(int **array, int m, int n);

调用时候要把数组名转换位二维指针

Func((int**)a, 3, 3);

获取具体数组元素

*((int*)array + n*i + j);

:其中 (int *)array把array转换成一维数组的存储方式

然后从一维数组里读取元素。

若*(array + n*i + j);  输出:

00000001

00000002

00000003

00000004

00000005

00000006

00000007

00000008

00000009

0000000A

0000000B

0000000C

0000000D

0000000E

0000000F

00000010

若*((int*)array + n*i + j); 输出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

3.最方便的还是转为一维指针。

因为在内存中是连续存放的,所以。。。。。

void Func(int *array, int m, int n);

调用时候要把数组名转换位二维指针

Func((int*)a, 3, 3);

获取具体数组元素

*(array + n*i + j);

时间: 2024-10-13 07:16:15

C++基础知识——二维数组做函数参数的相关文章

二维数组做函数参数、指向指针的指针做函数参数

这里有一篇文章  写的很好http://blog.csdn.net/f81892461/article/details/8974087 该文章中有一句话  总之就是:数组无法作为参数,总会被编译器将地址赋值给形参指针的,即使指针定义成数组形式,也还是指针.然后各种差别都是由数组和指针不同的定位元素的方式导致的. 这句话说的很对啊,数组做形参的是时候都是被当成指针来处理的.不明白这句话的可以看一下,参考文章链接里的那幅图,注意比较一下下图中的两个:data+1,第一个data+1指向的是元素dat

C++二维数组做函数参数

二维数组做函数参数的形式主要有: /对于一个m行n列int元素的二维数组 //函数f的形参形式 f(int daytab[m][n]) {...} //以下两种可以忽略行数 f(int daytab[][n]) {...} f(int (*daytab)[n]) {...} 这里都不能忽略第二维的大小.主要 原因是二维数组在栈内分配的内存是连续的,它的每一行都有相同的元素,这样,array[i][j] 和 *(*(array +i) +j)是一样的,程序是知道array+i的i实际上偏移了i*N

二维数组作为函数参数深度详解

        前几天和同学讨论数组作为函数参数,感觉各种困惑.花了一些时间在网上查看了一些资料,并加上自己的理解.记录一下! 一. 指向指针的指针和指向数组的指针 很多人以为"指向数组的指针"就是"指向指针的指针",于是有人写这样的代码: int a[3][4]; int **p = a; //错误 数组实际类型是int [3][4],在作为右值时可以被转化为int (*)[4],它们都和int **不同,自然不可用. 那么,你要用一个指针来指向a,就要用一个

二维数组作为函数参数的几种方法

#include <stdio.h> #define N 5 void fun1(int a[N][N]) { int i,j; for (i=0;i<N;i++) { for (j=0;j<N;j++) { if (i>j) { a[i][j]+=a[j][i]; a[j][i]=0; } } } } void fun2(int **a,int m,int n) { int i,j; for (i=0;i<m;i++) { for (j=0;j<n;j++) {

C++_二维数组作为函数参数的使用方法

二维数组作为函数参数的使用方法 /*01)恒等式:ar2[r][c] == *(*(ar2+r)+c)03) ar2+r指向编号为r的元素,该元素由c个int型(或其他类型)数组成,编号从0开始02)int a[100][4]; ....   int total = sum(a,100); //在主函数中调用sum()函数,使用二维数组中的全部的数据   int total = sum(a,10); //在主函数中调用sum()函数,使用二维数组中的前十行数据   int total = sum

二维数组做函数参数传递

#include<stdio.h> //#include<> //二位数组作为函数参数时,可以不指定第一个下标 void print_buf(int (*p)[3],int a,int b) //void print_buf(int p[][3],int a,int b) { int i,j; for(i = 0 ; i < a; i++) { for(j = 0; j < b; j++) { printf("p[%d][%d] = %d ",i,j

如何将二维数组作为函数参数

如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间. 正文: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如何 将二维数组作为参数传递,原文如下(略有改变,请原谅): [原文开始] 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的

二维数组作为函数参数

#include<stdio.h> //#include<> //二位数组作为函数参数时,可以不指定第一个下标 void print_buf(int (*p)[3],int a,int b) //void print_buf(int p[][3],int a,int b) { int i,j; for(i = 0 ; i < a; i++) { for(j = 0; j < b; j++) { printf("p[%d][%d] = %d ",i,j

C++ 数组、二维数组、函数参数

一维数组: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 /**为了方便 数组的类型全部都是int类型的*/ 6 int numbers[5] = {1,2,3,4,5}; 7 /**通过指针的方式访问数组*/ 8 int * p = numbers; 9 cout << "普通指针的方式访问:\n"; 10 for (int i = 0; i < 5; i++) 11 co