首页 > 其他分享 >C语言中将二维数组作为函数参数来传递

C语言中将二维数组作为函数参数来传递

时间:2023-06-25 09:33:07浏览次数:43  
标签:str int C语言 char 函数参数 二维 数组 printf

C语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:
方法一,形参给出第二维的长度

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

void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 func(3, str);
}

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

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

void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 func(3, str);
}

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

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

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

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

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

标签:str,int,C语言,char,函数参数,二维,数组,printf
From: https://www.cnblogs.com/sggggr/p/17502148.html

相关文章

  • C语言-assert.h
    assert() assert.h头文件定义了宏assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。assert(PI>3);上面代码在程序运行到这一行语句时,验证变量PI是否大于3。如果确实大于3,程序继续运行,否则就会终止运行,并且给出报错信息提示。asser......
  • C语言里面那些你必须知道的常用关键字(详细讲解)
    前言  哈喽,各位铁汁们好啊!✨今天来给大家带来的是C语言中我们常用的关键字静态static的详细讲解和typedef、#define定义常量和宏。  既然是详解想必大家必定是想学一些平常学不到的东西吧!这里博主给大家详细讲解static修饰的变量在内存重视如何存储的,顺带给大家讲一下C/C++......
  • c语言-字符串+转义字符+注释、语句、函数、数组、操作符 2
    一、字符串+转义字符+注释字符串类型(相较于字符数据类型):eg:“”;//空字符串定义:由双引号引起的一串字符为字符串字面值,简称字符串。(后面默认会有\0,结束标志不算内容intmain(){chararr1[]="abc";//数组//"abc"——'a''b''c''\0'——'\0'......
  • c# 基于wechat_qrcode opencv插件,网络二维码图片批量识别(一)
     一、基本概念  微信开源了其二维码的解码功能,并贡献给OpenCV社区。其开源的wechat_qrcode项目被收录到OpenCVcontrib项目中。从OpenCV4.5.2版本开始,就可以直接使用。该项目github地址: https://github.com/opencv/opencv_contrib/tree/master/modules/wechat_......
  • Golang技巧:如何为函数参数添加默认值?
    你是否是那些在Go中缺少默认参数值而感到沮丧的众多程序员之一?如果是的话,你绝对不是一个人!如何为函数参数添加默认值。你是否曾因为Go语言没有默认参数值而感到沮丧?好消息是,你并不孤单!这个令人讨厌的限制会让你的代码更加繁琐,难以阅读。每次都需要写额外的代码来检查参数是否......
  • 初始C语言2
    学习感想今天一大早起来就开始看(肝)鹏哥的视频,三个小时半啊!!!从早上8点多到现在快13点,知道这三小时半我怎么过的吗?呜呜呜呜!但是终于坚持学完了这一个视频。这一次视频还是讲的很基础的内容,之前自己也涉及过,但也学到了不一样的东西,比如讲到常量时,不仅提到了我之前学过的常变量和定义标......
  • C语言 【阶乘】
    原#include<stdio.h>intmain(){intn;intsum=1;printf("输入数字:");scanf("%d",&n);for(inti=1;i<=n;i++){sum*=i;}printf("%d的阶乘为%d\n",n,sum);return0;......
  • C语言I/O操作
    (只写了文件调用的,C库自己看吧)1、系统调用定义:指操作系统提供给用户程序的调用的一组“特殊接口”,用户程序可以通过这组特殊接口来获得操作系统内核提供的服务2、Linux文件描述符当某个程序打开程序时,操作系统会返回相应的文件描述符,(相当于文件的别名,打开之后就只用......
  • 二维数组的传参方式
    1.传数组整体格式:(1)给函数传参时,用数组名arr;(2)函数定义时,用intarr[3][5]接收;(3)在函数中打印元素时,用arr[1][1]。voidtest(intarr[3][5]){ printf("%d",arr[1][1]);}intmain(){ intarr[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}}; test(arr); return0;}2.传首元......
  • C语言【三数中找最大值】
    原#include<stdio.h>intmain(){inta,b,c;printf("输入三个数:");scanf("%d%d%d",&a,&b,&c);if(a>b&&a>c){printf("最大值为:%d\n",a);}elseif(a>b......