c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法

/*********************************
* 方法1: 第一维的长度可以不指定 *
* 但必须指定第二维的长度 *
*********************************/
void fun(int a[][], int n, int m)
{
int i, j; for (i = ; i < n; i++)
{
for (j = ; j < m; j++)
printf("%d ", a[i][j]); printf("\n");
}
}
/*****************************************
*方法2: 指向一个有5个元素一维数组的指针 *
*****************************************/
void fun(int(*a)[], int n, int m)
{
int i, j; for (i = ; i < n; i++)
{
for (j = ; j < m; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}

前面两种方法是必须指明所有维数大小或者省略第一维的。还有一种是网上一直有指针的指针来传递,我用vs2013试了一下,代码如下;

void fun(int **a, int n, int m)

这个直接用fun(a,3,3)是出错的

aaarticlea/png;base64,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" alt="" />

所以,我另想一个方法,因为数组是顺序存储,所以我们只要传数组的第一个地址过去就可以得到其他,具体看下面代码

#include<stdio.h>
void fun(int *a, int n, int m)
{
for (int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
{
printf("%d ", *(a + i*m + j));
}
printf("\n");
}
} int main()
{ int a[][] =
{
{ , },
{ , , },
{ }
};
printf("%d %d\n",a,a[]); fun(*a,,);//fun(a[0][0],3,3) fun(a[0],3,3)这三种都可以 return ;
}

c语言二维数组传递的更多相关文章

  1. c++ 二维数组传递

    c++ 二维数组传递 我们在传递二维数组时,对于新手来说,可能会存在某些问题,下面讲解几种传递方法 在讲解如何传递二维数组时,先看看如何动态new 二维数组 // 二维数组动态申请 int row , ...

  2. C语言 二维数组(指针)动态分配和释放(转)

    C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按 ...

  3. C语言二维数组作为函数参数

    设有整型二维数组a[3][4]如下:0   1   2   34   5   6   78   9  10  11 它的定义为:    int a[3][4]={{0,1,2,3},{4,5,6,7} ...

  4. 关于c语言二维数组与指针的个人理解及处理办法。

    相信大家在学习C语言时,对一维数组和指针的理解应该是自信的,但是,我在学习过程中,看到网上一些博文,发现即便是参加工作的一些专业编程人员,突然碰到二维数组和指针的问题时,也可能会遇到难以处理的诡异问题 ...

  5. C语言二维数组作为函数的参数

    前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...

  6. C语言 二维数组复制、清零及打印显示

    #include <stdlib.h> #include <stdio.h> #include <string.h> //二维整型数组打印显示 ],int row, ...

  7. C语言二维数组作业

    一.PTA实验作业 题目1:7-3 出生年 1. 本题PTA提交列表 2. 设计思路 1.声明一个函数different()用来计算一个年份的不同数字个数 2.定义y(y是来计算符合要求的年份的量), ...

  8. C语言二维数组

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...

  9. c#二维数组传递与拷贝

    定义 string[,] arr = new string[12, 31] 另一种string[][] ary = new string[5][];相当于一维数组 常量二维数组定义, 用readonl ...

随机推荐

  1. css 优先级 机制

    多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External style sheet ...

  2. 【linux】学习7

    鸟哥 22章内容 单个源代码编译运行 设有一个hello.c 可以用下面方式运行 生成可执行文件a.out [localhost scripts]$ gcc hello.c [localhost sc ...

  3. 【ACM】hud1166 敌兵布阵(线段树)

    经验: cout 特别慢 如果要求速度 全部用 printf !!! 在学习线段树 内容来自:http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/24 ...

  4. 解决【无法启动此程序,因为计算机中丢失MSVCP71.dll。尝试重新安装该程序以解决此问题】问题

    今日电脑偶然出现:[无法启动此程序,因为计算机中丢失MSVCP71.dll.尝试重新安装该程序以解决此问题.]的不断地弹窗报错. 在网上查找了好久,也没有找到解决办法,就在我将要准备重装系统的时候,又 ...

  5. [Android Pro] Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    方法一.在Activity的onCreate中添加如下代码 getWindow().setFormat(PixelFormat.TRANSLUCENT); reference to :  http:/ ...

  6. Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]

    平时用的都是Centos系统,今天偶然在Ubuntu下编译了一次代码,发现报错了: 源码: #include <stdio.h> #include <sys/time.h> # ...

  7. SQL TO LINQ(Linqer神器)

    此软件可以把SQL语句转换成LINQ语句 首先把Linqer下载到本地, 1.在VS中创建.dbml文件和.cs文件 打开VS,创建一个控制台项目即可,再添加一个dbml项目 2.添加连接数据库 3. ...

  8. SYSIBM.SYSPACKSTMT db2 存储statement的表

    SYSIBM.SYSPACKSTMT table   The SYSIBM.SYSPACKSTMT table contains one or more rows for each statement ...

  9. NYOJ题目1102Fibonacci数列

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsQAAAKFCAIAAABEM2gdAAAgAElEQVR4nO3dP1Iqy98H4HcT5i7EmI ...

  10. java的system.arraycopy()方法

    java.lang.System的静态方法arraycopy()可以实现数组的复制,讲课的老师说这个方法效率比较高,如果数组有成千上万个元素,那么用这个方法,比用for语句循环快不少.于是我试了试,发 ...