c语言二维数组传递

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

/*********************************
* 方法1: 第一维的长度可以不指定 *
* 但必须指定第二维的长度 *
*********************************/
void fun(int a[][3], int n, int m)
{
    int i, j;

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            printf("%d ", a[i][j]);

        printf("\n");
    }
}
/*****************************************
*方法2: 指向一个有5个元素一维数组的指针 *
*****************************************/
void fun(int(*a)[3], int n, int m)
{
    int i, j;

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
}

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

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

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

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

#include<stdio.h>void fun(int *a, int n, int m)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ", *(a + i*m + j));
        }
        printf("\n");
    }
}

int main()
{

    int a[3][3] =
    {
        { 1, 2 },
        { 3, 4, 5 },
        { 6 }
    };
    printf("%d %d\n",a,a[0]);

    fun(*a,3,3);//fun(a[0][0],3,3)   fun(a[0],3,3)这三种都可以

    return 0;
}
时间: 2024-10-01 06:38:57

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

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

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include <cstdio> void print(int *a[3]) { printf("%d\n",a[0][0]); } int main() { int a[2][3] = {1,2,3,4,5,6}; print(a); return 0; } 编译程序时候,在第10行提示错误信息:|

C语言 二维数组与指针笔记

今天分析了C语言二维数组和指针的基本理解,感觉有点懵...代码记录一下,如果有大神临幸发现哪里有误,欢迎指正~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> //void func(int p[][]) //这样写等同于void func(int **p) p++移动了四个字节,(*p)++移动了四个字节,不符合二维数组规律 //{ //} //列优先输出的函数(即竖着输出) void func

C语言--二维数组,字符串数组,多维数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // int a[2][3]={ // {1,2,3}, // {4,5,6} // }; // int a[2][3]={1,2,3,4,5,6}; // //打印单个元素 // printf("%d",a[1][1]); // //元素没赋全,默认为0 // int b[2][3]={{1,2,3},{4}}; // /

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

C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按照16位.32位.64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位.32位的更快.而且除了运算能力之外,与32位处理器相比,64位处理器

C语言二维数组

一 :二维数组 一维数组的每一个元素又是一个数组(数组的数组) int a[3][4],定义一个数组,有3个元素,a[0].a[1].a[2] a[0]  又是一个一维数组,有4个元素 二:二维数组的定义及注意 格式:数据类型   二维数组名[第一维的长度][第二维的长度] int arr[3][4]; 注意: 1)数组名不能和变量名重复 2)遵循标识符命名原则 3)数组的长度可以使用宏定义 4)数组的长度可以使用变量 int m,n; scanf("%d,%d",&m,&am

c++ 二维数组传递

我们在传递二维数组时,对于新手来说,可能会存在某些问题,下面讲解几种传递方法 在讲解如何传递二维数组时,先看看如何动态new 二维数组 1 // 二维数组动态申请 2 int row ,col ; 3 cin >> row >> col; 4 5 int** arr; 6 // c++ 形式 7 arr = new int*[row]; 8 for(int i = 0;i<row;i++) 9 arr[i] = new int[col]; 10 11 // c 形式 12 a

Android jni 二维数组 传递

学习Android Jni时,一个二维 整数 数组的传递花了我好长时间,在网上查的资料都不全,当然最后是成功了,写在这里是为了自己记住,当然有人搜索到并利用了我会很高兴. in Android Java file public native boolean  add(int[][] qizidata,.....) 用JDK工具生产jni 的*.h文件 your project path> ..Javajdk1.6.0_10binjavah -classpath ./bin JAVA Class

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

#include <stdlib.h> #include <stdio.h> #include <string.h> //二维整型数组打印显示 void printarr2d(int (*a)[3],int row,int col) { int i,j; for(i=0; i<row; i++) { for(j=0; j<col; j++) { printf("%d ", a[i][j]); } printf("\n"

14-黑马程序员------C 语言学习笔记--- C语言二维数组

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 二 二维数组 01 二维数组的定义: 类型标识符 数组名[常量表达式][常量表达式]; 如:int a[3][4]; 表示定义了一个3行4列的整型二维数组a,含有12个数组元素. 02 二维数组的引用: 数组名[下标][下标]