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 ;
}

最新文章

  1. 为毛无法创建文本文件COM1.txt
  2. css整理-05 边框,背景和浮动,定位
  3. 使用递推解题:EOJ2999
  4. ”靠谱的C#“单例模式
  5. JavaScript插入节点
  6. POJ 1486 Sorting Slides (二分图关键匹配边)
  7. HDU 5810 Balls and Boxes (找规律)
  8. oracle中的exists 和not exists 用法 in与exists语句的效率问题
  9. Django中的CSRF
  10. linux局域网不能相互访问
  11. [APUE]进程控制(中)
  12. Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll
  13. H5混合开发问题总结
  14. 关于mysql-connector-net和C#.net
  15. [android] xml文件的序列化
  16. error: invalid use of void expression
  17. Study 5 —— CSS概述
  18. c++ 备忘
  19. 最强 Android Studio 使用小技巧和快捷键总结
  20. cmake重新编译

热门文章

  1. jsp页面路径问题
  2. 【leetcode】length of last word (easy)
  3. The sandbox is not in sync with the Podfile.lock. Run &#39;pod install&#39; or update your CocoaPods installation.
  4. chaper3_exerise_Uva1225_digit_counting
  5. 有关Java的优秀博客集锦
  6. NYOJ题目198数数
  7. 1.2 容器-container
  8. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
  9. HTML5学习之WebSocket通讯(六)
  10. 【翻译三】java-并发之线程对象和实现