【C语言篇】数组作为函数参数

2023-11-17

一、一维数组作为函数参数

1.数组名当做函数实际参数,也是值传递,不过是传递的地址而已。

#include <stdio.h>

void printArr(int arry[],int len)//形参中不存在数组的概念,即便中括号约定了数组的大小,也无效
						  //传递的是一个地址,是数组的首地址
{							
	int i;
	printf("printArr:arry的大小是:%d\n",sizeof(arry));//在OS用8个字节来表示一个地址
	for(i=0;i<len;i++){
		printf("%d ",arry[i]);
	}
	putchar('\n');
}

int main()
{
	int len;
	int arry[5] = {1,2,3,4,5};
	len = sizeof(arry)/sizeof(arry[0]);
	printf("main:arry的大小是:%d\n",sizeof(arry));
	printArr(arry,len);//数组名代表整个数组的首地址
	printArr(&arry[0],len);//首元素地址也代表整个数组首地址
	return 0;
}

 2.变量的值传递&内存空间(地址)传递

#include <stdio.h>

void changeData(int data)//数值传递,操作的是不同的内存空间
{
	data = data + 100;
	printf("address:%p,dataInFunc = %d\n",&data,data);
}

int main()
{
	int data = 10;
	
	changeData(data);
	printf("address:%p,data = %d\n",&data,data);
	
	return 0;
}

#include <stdio.h>

void changeData(int data[])//操作的是相同的内存空间,数组名作为实参,到底传了什么?(地址)
{
	data[0] = data[0] + 100;
	printf("dataInFunc = %d\n",data[0]);
}

int main()
{
	int data[2] = {10,20};
	changeData(data);
	printf("data = %d\n",data[0]);
	
	return 0;
}

 

 3.编程案例:有两个班的同学,分别是10个人和5个人,分别求这两个班的平均分

#include <stdio.h>

//初始化数组
void initArry(int arry[],int len)
{
	int i;
	for(i=0;i<len;i++){
		printf("请输入第%d个学生的成绩:",i+1);
		scanf("%d",&arry[i]);
	}
	puts("done");
}
//打印数组
void printArry(int arry[],int len)
{
	int i;
	printf("总人数%d个\n",len);
	for(i=0;i<len;i++){
		printf("%d ",arry[i]);
	}
	puts("\ndone");
}
//计算平均分
float getAverage(int arry[],int len)
{
	int i;
	float aver = 0.0;
	int sum = 0;//总分变量一定要初始化为0,否则默认值是一个大数会影响结果
	for(i=0;i<len;i++){
		sum = sum + arry[i];
	}
	aver = (float)sum/len;
	return aver;
}

int main()
{
	int classOne[5];
	int classTwo[10];
	int lenOfClassOne = sizeof(classOne)/sizeof(classOne[0]);
	int lenOfClassTwo = sizeof(classTwo)/sizeof(classTwo[0]);
	float averOfClassOne;
	float averOfClassTwo;
	
	initArry(classOne,lenOfClassOne);
	initArry(classTwo,lenOfClassTwo);
	
	printArry(classOne,lenOfClassOne);
	printArry(classTwo,lenOfClassTwo);
	
	averOfClassOne = getAverage(classOne,lenOfClassOne);
	averOfClassTwo = getAverage(classTwo,lenOfClassTwo);
	
	printf("一班的平均成绩是%.2f\n",averOfClassOne);
	printf("二班的平均成绩是%.2f\n",averOfClassTwo);
	return 0;
}

二、 二维数组作为函数参数

1.形参怎么写?

合法写法:int arr[2][3]、int arr[ ][3];

不合法写法:int arr[ ][ ]

2.关心两点:(1)数组数据类型;(2)二维中的一维数组有多少个

3.编程示例

#include <stdio.h>

void printDoubleArry(int arry[][3])
{
	int i;
	int j;
	for(i=0;i<2;i++){
		for(j=0;j<3;j++){
			printf("%d  ",arry[i][j]);
		}
		putchar('\n');
	}
}

int main()
{
	int arry[2][3] = {{1,2,3},{11,22,33}};//特殊的一维数组,每个元素又是一个数组,大小确定
	printDoubleArry(arry);
	
	return 0;
}

 

4.编程案例:有3x4矩阵,初始化它并输出,然后求最大值并输出 

 

#include <stdio.h>

//初始化数组
void initDoubleArry(int arr[][4],int hang,int lie)
{
	int i;
	int j;
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			printf("请输入第%d行,第%d列的数据:\n",i+1,j+1);
			scanf("%d",&arr[i][j]);
			}
	}
	puts("done");
}
//打印数组
void printDoubleArry(int arr[][4],int hang,int lie)
{
	int i;
	int j;
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			printf("%d  ",arr[i][j]);
		}
		putchar('\n');
	}
}
//获取数组中元素最大值
int getMaxDataFromDoubleArry(int arr[][4],int hang,int lie)
{
	int i;
	int j;
	int max;
	
	max = arr[0][0];
	for(i=0;i<hang;i++){
		for(j=0;j<lie;j++){
			if(max < arr[i][j]){
				max = arr[i][j];
			}
		}
	}
	return max;
}

int main()
{
	int arr[3][4] ;//特殊的一维数组,每个元素又是一个数组,大小确定
	int max;
	
	initDoubleArry(arr,3,4);
	printDoubleArry(arr,3,4);
	max = getMaxDataFromDoubleArry(arr,3,4);
	
	printf("二维数组中最大的值是%d\n",max);
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言篇】数组作为函数参数 的相关文章

  • 实战剖析 Java 秒杀系统的实现

    本场 Chat 将为您介绍 如何从 0 到 1 搭建一个分布式架构的秒杀系统 如何利用 Redis 的特性发挥它在秒杀系统中的大作用 如何利用消息队列实现请求的异步处理 带您思考实现秒杀系统过程中需要注意的点 以及需要掌握的技巧 架构介绍
  • 我与CSDN的这十年——笔耕不辍,青春热血

    1024程序员的节日就要来了 作者也挤时间写了一篇文章 我与CSDN的这十年 分享下程序猿和程序媛的故事 纪念这十年奋斗和感动的日子 十年 说长不长 说短不短 人生进度条的八分之一 都是青春 都是热血 十年 从看博客到写博客 笔耕不辍 从未
  • ubuntu密码正确,却不能登录图形界面

    传统的方法是修改 Xauthority文件权限 不过我试了没有用 后来发现我的问题是因为安装了NVIDIA cuda驱动而导致的 所以先卸载nvidia驱动 再更新 就可以正常进入了 命令 sudo apt get remove purge
  • FreeRTOS临界段

    1 临界段 在访问共享资源时不希望被其他任务或者中断打断的代码 这段要执行的代码称为临界段代码 2 设置临界段的目的 保护共享资源 例如 全局变量 公共函数 不可重入函数 函数里面使用 了一些静态全局变量 malloc 等 保护外设的实时性

随机推荐

  • [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览

    目录 前言 第1章 什么是信息与通信 第2章 为啥要编制信息与通信发展规划 第3章 信息与通信如何高质量发展 重点 3 0 发展目标 编辑 3 1 建设新型数字基础设施 3 1 1 移动通信网 无线接入层 1G到5G 3 1 2 固定宽带网
  • android 使用 ImageLoader 显示文章和图片

    android 中使用Textview 显示文章及图片 1 下载 universal image loader 1 9 5 jar 添加到app项目中 2 在android 后台 的 onCreate 方法中初始化 ImageLoader
  • 利用Unidbg辅助还原哔哩哔哩Sign算法.

    bilibili unidbg http www zhuoyue360 com crack 87 html 老色批想抓哔哩哔哩的全站数据 通过人工智能自动找出美女 色 咱们想抓它一个个人信息 抓包分析 1 android 7 0 证书配置
  • vector容器

    1 vector简介 vector 和 arry 非常相似 唯一存在的不同是 vector 是动态分配内存空间 随着元素的增加空间自动增加 但是 arry 是静态的 wector 单端动态数组容器 只允许在一端进行操作 2 vector的使
  • 力扣网题号:389找不同python 实现

    题目描述 给定两个字符串 s 和 t 它们只包含小写字母 字符串 t 由字符串 s 随机重排 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 s abcd t abcde 输出 e 解释 e 是那个被添加的字母 一 题
  • ElementUI表单校验

    ElementUI表单校验 回忆jQuery表单校验是怎么做的 表单元素注册事件 事件绑定回调函数 在回调函数中获取用户输入的值 用js代码进行校验 用正则表达式进行校验 ElementUI校验 写校验规则 绑定校验规则
  • 扫码支付流程

    一 支付宝接入实现 1 流程 step1 用户在浏览器中访问商家网页应用 选择商品下单 确认购买 接口会调起支付宝客户端内的支付模块 此时会从商家网页应用跳转到支付宝客户端中并开始支付 支付完成后会跳转回商家网页应用内 最后商家展示支付结构
  • Redis之List类型原理和应用场景(三)

    Redis之List类型原理和应用场景 三 原理分析 由于C语言是没有list的设计 首先我们看一下普通双向链表结构 typedef struct listNode 前置节点 struct listNode prev 后置节点 struct
  • J1939协议中CAN ID 与PGN互换--遇到了广播报文

    Ref J1939 Explained A Simple Intro 2021 CSS Electronics Ref CAN 帧ID 与J1939 PGN 转换例子 horse 2007s的博客 CSDN博客 Ref 在J1939中多帧数
  • Linux下Docker安装mysql

    1 下载mysql镜像 访问 MySQL 镜像库地址 https hub docker com mysql tab tags 也可以用命令查看可用版本 docker search mysql 下载mysql镜像 默认下载最新稳定版 dock
  • C语言中putchar()函数的使用

    今天教C语言中的输入输出语句 对函数putchar 函数有些好奇 难道就只能输出char型的数据么 带着这样的疑问 在环境上进行了验证 验证结果还蛮有意思 共享一下 当我们定义一个变量a 并给a赋予0 255的值 很显然没有问题 如代码 i
  • ERP订单管理的操作与设计--开源软件诞生19

    赤龙ERP订单模块讲解 第19篇 用日志记录 开源软件 的诞生 点亮星标 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github com red
  • GC算法原理

    JVM 垃圾回收原理 对于JVM的垃圾收集 GC 这是一个作为Java开发者必须了解的内容 那么 我们需要去了解哪些内容呢 其实 GC主要是解决下面的三个问题 哪些内存需要回收 什么时候回收 如何回收 回答了这三个问题 也就对于GC算法的原
  • sudo堆缓冲区溢出提权漏洞(CVE-2021-3156)

    0x01 漏洞描述 这个漏洞被披露于2021年1月26日 漏洞的载体是我们常用的sudo命令 当sudo通过 s或 i命令行选项在shell模式下运行命令时 它将在命令参数中使用反斜杠转义特殊字符 但使用 s或 i标志运行sudoedit时
  • CTF MISC解题思路BUUCTF MISC9-16刷题

    1 文件中的秘密 查看文件属性备注 flag 870c5a72806115cb5439345d8b014396 2 wireshark 使用wireshark打开文件 菜单 编辑 查找分组 搜索关键字flag 在数据包中找到flag 3 L
  • 量化交易系统框架

    转自 https www cnblogs com huangfuyuan category 1290537 html
  • 华为OD机试 - 最大花费金额(Python)

    题目描述 双十一众多商品进行打折销售 小明想购买自己心仪的一些物品 但由于受购买资金限制 所以他决定从众多心仪商品中购买三件 而且想尽可能的花完资金 现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额 输入描述 输入第一行为一维整型数
  • 【Git CMD】Git常用命令总结

    目录 0 git的工作区 暂存区 本地仓库和远程仓库 0 1 图解 0 2 解析 1 本地仓库 1 1 创建版本库 1 2 分支 1 2 1 查看本地仓库的分支信息 1 2 2 创建分支 1 2 3 切换分支 1 2 4 重命名分支 1 2
  • win10计算机无访问权限,win10系统提示无internet访问权限怎么办

    原标题 win10系统提示无internet访问权限怎么办 大家好 今天分享一篇来自小白系统官网 xiaobaixitong com 的图文教程 win10系统提示无internet访问权限怎么办呢 很多朋友反映在使用电脑的时候出现没有网络
  • 【C语言篇】数组作为函数参数

    一 一维数组作为函数参数 1 数组名当做函数实际参数 也是值传递 不过是传递的地址而已 include