新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言数组作为函数参数:从入门到实战

发布时间:2026/9/27 12:17:50来源:尧图网络
C语言数组作为函数参数:从入门到实战
1. 引言今天学习了 C 语言中「数组作为函数参数」这一重要知识点。数组作为函数参数是 C 语言编程中非常基础且高频使用的技巧无论是处理一组数据、实现排序算法还是进行矩阵运算都离不开它。本文将系统梳理数组作为函数参数的几种方式、底层原理以及常见注意事项帮助你把今天学到的内容巩固扎实。2. 为什么需要把数组传给函数在 C 语言中函数是模块化编程的基本单位。当我们需要对一组数据进行统一处理时比如求平均值、排序、查找如果每次都在主函数里写一遍逻辑代码会变得冗长且难以维护。把数组作为参数传给函数就能把数据处理逻辑封装起来实现代码复用。例如求一个数组所有元素的和如果不用函数每次都要写循环而封装成函数后只需调用一次即可。3. 数组作为函数参数的两种基本写法3.1 数组名作为参数传数组首地址这是最常用的方式。函数形参写成数组形式实参直接传数组名。#includestdio.h// 形参写成数组形式intsumArray(intarr[],intn){intsum0;for(inti0;in;i){sumarr[i];}returnsum;}intmain(){intscores[]{85,92,78,90,88};inttotalsumArray(scores,5);printf(总分 %d\n,total);return0;}3.2 数组名作为参数的另一种写法数组名作为参数时除了写成数组形式也可以写成带长度的形式两者在编译器看来是等价的intsumArray(intarr[],intn){intsum0;for(inti0;in;i){sumarr[i];}returnsum;}这两种写法在编译器看来是等价的int arr[]会被自动转换为int *arr。rr。4. 数组作为函数参数的底层原理理解底层原理是掌握这一知识点的关键。4.1 传递的是地址不是整个数组当数组名作为实参传递时C 语言不会复制整个数组而是把数组的首地址即第一个元素的地址传给函数。这意味着函数内部对数组元素的修改会直接影响主函数中的原数组传递效率高无论数组多大都只传一个地址。4.2 为什么必须同时传数组长度由于函数只拿到首地址它并不知道数组到底有多长。因此必须额外传递一个表示数组长度的参数否则函数无法确定遍历的边界容易越界访问。// 错误示范没有传长度函数无法知道数组大小voidprintArray(intarr[]){// 无法确定循环次数}5. 函数内修改数组会改变原数组这是数组参数与普通变量参数最大的区别。普通变量按值传递函数内修改不影响实参而数组按地址传递函数内修改会直接改掉原数组。#includestdio.hvoiddoubleArray(intarr[],intn){for(inti0;in;i){arr[i]*2;// 直接修改原数组}}intmain(){intdata[]{1,2,3,4};doubleArray(data,4);// 此时 data 已变为 {2, 4, 6, 8}for(inti0;i4;i){printf(%d ,data[i]);}return0;}6. 二维数组作为函数参数二维数组作为参数时形参必须指定第二维的大小列数第一维可以省略。#includestdio.h// 必须写列数行数可省略voidprintMatrix(intmat[][3],introws){for(inti0;irows;i){for(intj0;j3;j){printf(%d ,mat[i][j]);}printf(\n);}}intmain(){intmatrix[2][3]{{1,2,3},{4,5,6}};printMatrix(matrix,2);return0;}为什么必须指定列数因为编译器需要根据列数来计算mat[i][j]的实际内存地址偏移。7. 常见错误与注意事项7.1 忘记传数组长度这是初学者最容易犯的错误。数组参数不会自带长度信息务必显式传递。7.2 在函数内用sizeof求数组大小在函数内部对形参使用sizeof(arr)得到的是数组首元素的大小通常是 4 字节而不是整个数组的大小。这是很多人的误区voidbadFunc(intarr[]){intlensizeof(arr)/sizeof(arr[0]);// 错误得到的是指针大小}7.3 越界访问由于函数只拿到地址如果传入的长度参数大于实际数组长度就会发生越界访问导致未定义行为。7.4 用const保护只读数组如果函数只需要读取数组而不修改建议在形参前加const防止误修改intsumArray(constintarr[],intn){// 只能读不能写}8. 综合实战数组排序把今天学的知识综合运用一下写一个用数组参数实现冒泡排序的完整程序#includestdio.h// 冒泡排序直接修改原数组voidbubbleSort(intarr[],intn){for(inti0;in-1;i){for(intj0;jn-1-i;j){if(arr[j]arr[j1]){inttemparr[j];arr[j]arr[j1];arr[j1]temp;}}}}voidprintArray(constintarr[],intn){for(inti0;in;i){printf(%d ,arr[i]);}printf(\n);}intmain(){intnums[]{64,34,25,12,22,11,90};intnsizeof(nums)/sizeof(nums[0]);printf(排序前);printArray(nums,n);bubbleSort(nums,n);printf(排序后);printArray(nums,n);return0;}9. 总结今天学习的「数组作为函数参数」可以总结为几个核心要点数组名作为参数传递的是首地址函数内修改会改变原数组必须同时传递数组长度否则函数无法确定边界int arr[]与int *arr在形参中完全等价二维数组作参数必须指定列数函数内用sizeof求数组大小是错误的只读数组建议加const保护。掌握了这些你就已经理解了 C 语言中数组与函数结合的核心机制。接下来可以继续学习指针数组、函数指针等进阶内容进一步加深对 C 语言内存模型的理解。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

3招搞懂百度推广渠道怎么选,别再把钱打水漂 2026/9/27 12:17:47

3招搞懂百度推广渠道怎么选,别再把钱打水漂

3招搞懂百度推广渠道怎么选,别再把钱打水漂 网站做好了没人访问,这是很多老板最头疼的事。你花了几万块做了个高大上的官网,结果打开一看,后台流量全是零。这时候有人跳出来告诉你,得投百度推广。但百度推广渠道到底怎么选?是选信息流、搜索竞价,还是…

阅读更多 →
2026最新婚庆网站建设的需求分析:拒绝模板丑站,技术选型避坑指南 2026/9/27 12:17:28

2026最新婚庆网站建设的需求分析:拒绝模板丑站,技术选型避坑指南

2026最新婚庆网站建设的需求分析:拒绝模板丑站,技术选型避坑指南 别再看那些千篇一律的婚庆模板了,真的丑到让人想砸键盘。客户拿着手机截图问“你们这也太low了”,你连反驳的底气都没有。2026年最新的市场环境里, 模板网站太丑不够用…

阅读更多 →
3步搞定旅游网站开发的流程图:新手速查手册 2026/9/27 12:17:02

3步搞定旅游网站开发的流程图:新手速查手册

3步搞定旅游网站开发的流程图:新手速查手册 自己不会代码想做网站,别被那些复杂的后端架构吓跑。很多老板以为做旅游网站得招个团队,其实只要理清 旅游网站开发的流程图 ,找对工具,一个人也能搞定。这份 速查手册…

阅读更多 →
大型网站得多少钱?不懂代码也能省50%预算的建站最佳实践 2026/9/27 12:16:43

大型网站得多少钱?不懂代码也能省50%预算的建站最佳实践

大型网站得多少钱?不懂代码也能省50%预算的建站最佳实践 自己不会代码想做网站,最怕的就是被报价单上的数字吓退。很多站长一上来就问“大型网站得多少钱”,却没搞清楚自己到底需要多大的“大型”。其实, 最佳实践…

阅读更多 →
不懂代码做动态图片素材网站?3套方案对比评测,新手也能落地 2026/9/27 12:16:36

不懂代码做动态图片素材网站?3套方案对比评测,新手也能落地

不懂代码做动态图片素材网站?3套方案对比评测,新手也能落地 自己不会代码,却想做一个能展示高质量GIF、APNG或者WebP动图的素材站?这确实是很多设计师、独立开发者甚至电商运营负责人的噩梦。你手里有几百个精心制作的动态表情包或产品演示动…

阅读更多 →
2026最新一个网站需要多少钱?避开模板坑的实战报价单 2026/9/27 12:14:41

2026最新一个网站需要多少钱?避开模板坑的实战报价单

2026最新一个网站需要多少钱?避开模板坑的实战报价单 很多老板一上来就问:“做个官网大概要多少钱?” 这时候如果你只回一个数字,比如“八千”或者“三万”,其实是在误导自己。 模板网站太丑不够用…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉