c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:

方法一, 形参给出第二维的长度

例如:

#include <stdio.h>
void func(int n, char str[ ][5] )
{
int i;
for(i = ; i < n; i++)
printf("/nstr[%d] = %s/n", i, str[i]);
} void main()
{
char* p[];
char str[][] = {"abc","def","ghi"};
func(, str);
}

方法二,形参声明为指向数组的指针

例如:

#include <stdio.h>
void func(int n, char (*str)[5] )
{
int i;
for(i = ; i < n; i++)
printf("/nstr[%d] = %s/n", i, str[i]);
} void main()
{
char* p[];
char str[][] = {"abc","def","ghi"};
func(, str);
}

方法三,形参声明为指针的指针

例如:

#include <stdio.h>
void func(int n, char **str)
{
int i;
for(i = ; i < n; i++)
printf("/nstr[%d] = %s/n", i, str[i]);
}
void main()
{
char* p[];
char str[][] = {"abc","def","ghi"};
p[] = &str[][];
p[] = str[];
p[] = str[];
func(, p); }

附加,第三种传参方式说明:在函数中使用传参过来的二维数组(指针)进行数组取值的时候不能使用(array[i][j])这种形式来取值。应该将二维数组看成一个一维数组,使用array[i * j + j]这种形式来进行取值。

个人理解:这是因为在传参的时候,我们将array[][]数组当成二级指针来进行传递,所以我认为他是将数组的属性退化成了二级指针的属性,因此这里并不能使用array[i][j]这种方式来进行数组取值。输出格式如下

int tag = ;//tag标记,在方法中输出二维数组时所需要的标记
printf("使用传递过来的二维数组参数输出二维数组\n");
for(i = ; i < rows*columns; i++) {
printf("%d,", array[i]);
if(tag == columns-) {
tag = ;
printf("\n");
} else {
tag++;
}
}

C语言中将二维数组作为函数参数来传递的更多相关文章

  1. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

  2. 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} ...

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

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

  4. C语言学习笔记 (005) - 二维数组作为函数参数传递剖析

    前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...} / ...

  5. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  6. C语言之二维数组

    二维数组 还是一个数组,只不过数组中得每一个元素又是一个数组 1). 声明语法 类型 数组名[行][列]; 例:  int nums[2][3];//2行3列的二维数组,保存的数据类型是int类型 c ...

  7. C语言基础--二维数组

    二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...

  8. C++中将二维数组(静态的和动态的)作为函数的参数传递

    在C++编程中,我们经常将数组作为参数传递到另一个函数,数组的维数不同,传递方式也不同,此处将作一个总结,包括一维静态.动态数组,二维静态.动态数组. 一,一维数组(静态.动态一维数组) 1, 一维数 ...

  9. C语言 字符二维数组(多个字符串)探讨 求解

    什么是二维字符数组? 二维字符数组中为什么定义字符串是一行一个? “hello world”在C语言中代表什么? 为什么只能在定义时才能写成char   a[10]="jvssj" ...

随机推荐

  1. Linux命令-磁盘管理(二)

    Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...

  2. 杜教筛&min_25筛复习

    杜教筛 适用条件 你要能构造出\(g(x),h(x)\),使得\(h=f*g\). \(G(x),H(x)\)的值可以快速计算. 过程 我们要求的是\(F(n)=\sum_{i=1}^{n}f(i)\ ...

  3. 原生Js_实现简单的下拉折叠菜单(添加弹出动画效果)

    用javascript实现简单的下拉折叠菜单效果 实现步骤 (a)获得各操作的dom对象: (b)在所有菜单按钮对象上添加单击事件: (c)设置所有菜单按钮样式为空,并将当前按钮的样式设置为“acti ...

  4. C1:DOM 元素的尺寸和位置

    DOM元素的尺寸和位置 DOM 元素的尺寸 DOM.offsetWidth/offsetHeight: 包括内容区宽/高,padding,border,不包括margin.如果元素的box-sizei ...

  5. ASP.NET中的物理路径与虚拟路径

    物理路径:c:\PathsAndURLs\Content\Colors.html虚拟路径:(http://localhost:53274/Content/Colors.html)路径中端口号后面的那部 ...

  6. leetcode-easy-math-326. Power of Three

    mycode class Solution(object): def isPowerOfThree(self, n): """ :type n: int :rtype: ...

  7. leetcode-easy-listnode-206 reverse linked list

    mycode   98.87 # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x ...

  8. python之注释的分类

    <1> 单行注释 以#开头,#右边的所有东西当做说明,而不是真正要执行的程序,起辅助说明作用 # 我是注释,可以在里写一些功能说明之类的哦 print('hello world') < ...

  9. Ubuntu 防火墙常用配置操作(ufw)【适用于 Debian 及其衍生版---Linux Mint、Deepin 等】-转

    Ubuntu 防火墙常用配置操作(ufw)[适用于 Debian 及其衍生版---Linux Mint.Deepin 等] 点击访问

  10. Professional JavaScript for Web Developers P226

    我是这么理解的: (object.getName = object.getName),这条语句在执行结束后,返回的是右操作数object.getName: 但是关键是这个右操作数现在放在哪里 ?  我 ...