数组作为函数参数

C语言用指向数组的指针作函数参数小例子 有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。有些网上给出的方法有bug,这个是我自己修改过的程序。 立即下载
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//数组作为函数的参数,传递的是地址(指针),占4个字节
//函数的参数对于数组没有副本机制,数组的拷贝非常浪费内存空间以及CPU
void show(int num[10])
{
	for (int i = 0; i < 10; i++)
	{
		printf("%d\n", num[i]);
	}
}

void show1(int *p)
{
	for (int i = 0; i < 10; i++)
		printf("%d\n", p[i]);
}

void show2(int num[3][4])
{
	for (int i = 0; i < 12; i++)
	{
		printf("%d\n", num[i / 4][i % 4]);
	}
}
void show3(int(*p)[4])
{
	for (int i = 0; i < 12; i++)
	{
		printf("%d\n", p[i / 4][i % 4]);
	}
}

void main1()
{
	int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int number[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

	//show1(num);
	//show2(number);
	show3(number);

	system("pause");
}

//数组的值逆序排列
void change(int number[], int n)
{
	int turn;
	for (int i = 0; i < n / 2; i++)
	{
		turn = number[i];
		number[i] = number[n - 1 - i];
		number[n - 1 - i] = turn;
	}
	for (int i = 0; i < n; i++)
		printf("%d\n", number[i]);
}

void main2()
{
	int num[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
	change(num, 11);
	change(num, 11);

	system("pause");
}


//用指针的方法将数组的值从大到小输出
//冒泡排序
void order(int *p, int n)
{
	int max, turn;
	for (int i = 0; i < n - 1; i++)
	{
		max = i;
		for (int j = i + 1; j < n; j++)
		{
			if (p[j]>p[max])
			{
				max = j;
			}
		}
		if (max != i)
		{
			turn = p[i];
			p[i] = p[max];
			p[max] = turn;
		}
		printf("%d\n", p[i]);
	}
	printf("%d\n", p[n - 1]);

}

void order1(int *p, int n)
{
	int turn;
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (*(p + j)>*(p + i))
			{
				turn = *(p + i);
				*(p + i) = *(p + j);
				*(p + j) = turn;
			}
		}
		printf("%d\n", *(p + i));
	}
	printf("%d\n", *(p + n - 1));
}

void main3()
{
	time_t ts;
	srand((unsigned int)time(&ts));

	int num[10];
	for (int i = 0; i < 10; i++)
	{
		num[i] = rand() % 100;
		printf("%d\n", num[i]);
	}

	printf("------------------------------\n");
	order1(num, 10);

	system("pause");
}

//有一个班,3个学生,各学4门课,计算总平均成绩以及第n个学生的成绩
void avr(int(*p)[4], int n)			//指向一维数组的指针
{
	int res = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			res += p[i][j];
		}
	}
	printf("average score is %d\n", res /= 12);
}

void showstuscore(int num, int(*p)[4])
{

	for (int i = 0; i < 4; i++)
	{
		printf("%d\n", *(*(p + num - 1) + i));

	}
}

//只要有一门成绩不及格,则输出其所有科目的成绩
void 抓不及格(int num, int(*p)[4])
{
	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			if (*(*(p + i) + j) < 60)
			{
				printf("第%d位同学的所有成绩\n", i + 1);
				showstuscore(i + 1, p);
				break;
			}
		}
	}

}

void main()
{
	int score[3][4] = { { 45, 68, 97, 68 }, { 49, 67, 65, 99 }, { 100, 59, 98, 86 } };
	//avr(score, 3);

	//int num;
	//puts("查看第几位学生的所有成绩?\n");
	//scanf_s("%d", &num);
	//showstuscore(num, score);

	抓不及格(3, score);

	system("pause");
}

STM32----SPI+DMA高效读写外部Flash的配置与实战 本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。 阅读详情

相关推荐

2025反爬虫革命:京东商品接口的动态指纹认证与量子加密传输方案

在2025年,全球电商API接口面临的安全威胁呈现指数级增长:京东构建了基于硬件、软件、行为三重维度的设备指纹模型:京东构建了基于BB84+E91混合协议的量子密钥中继网络:

FB13713612741的博客 1649

详谈C++中数组作为函数参数

一、一个例子引发的思考  运行以下代码,请问输出是什么?例子来源于《剑指Offer》,我对书上例子做了修改,让其可以运行。#include<iostream> using namespace std;int GetSize(int data[]) { return sizeof(data); } int main() { int data1[] = {1,2,3,4,5};

1万+

一文吃透 BMS:动力电池与储能共用的电池管控全架构详解

BMS作为电池系统的核心控制器,其技术深度和系统复杂性不容小觑。动力电池与储能系统虽然应用场景不同,但在核心架构上共享大量基础技术。成功的BMS设计需要在精度、可靠性、成本、功耗之间找到最佳平衡点。未来,随着电池技术的进步和智能化需求的提升,BMS将向着更高集成度、更强智能化、更优经济性的方向发展。无论是汽车工程师还是储能系统设计师,深入理解BMS的全栈架构,掌握其核心技术原理,都将是应对未来能源存储挑战的关键能力。核心要点回顾BMS采用分层分布式架构,硬件是基础,算法是灵魂。

小帽子的博客 341

C语言二维数组作为函数入参 指针与数组入参详解

C语言二维数组作为函数入参 指针与数组入参详解

jakercl的博客 2975

告别拼音!用VSCode+Dosbox-X搞定汇编语言课程设计里的中文姓名显示

本文详细介绍了如何利用VSCode和Dosbox-X解决汇编语言课程设计中中文姓名显示的问题。通过配置开发环境、理解GB2312编码及正确使用汇编指令,学生可以告别拼音显示,实现中文字符的正确输出。文章还提供了完整的代码示例和常见问题排查方法,帮助读者快速掌握这一实用技能。

weixin_30872337的博客 425

线性自抗扰控制LADRC(一)---基础知识

LADRC(Linear Active Disturbance Rejection Control)是ADRC的线性化版本,通过简化非线性模块(如ESO和反馈律)降低计算复杂度,适用于实时控制系统(如电机驱动)。

ApexYuan 2077

学习心得——数组作为函数参数后sizeof获取不到数组在内存中所占字节数的问题

帮同学解决了一个问题,自己从中也学到了东西,记下学习心得~~~ 问题重现: 数组通过函数传递后为什么获取不到数组在内存中占用地址的长度? 在VS中编写如下的测试代码: #include "stdafx.h" void test(int b[]) { int mm, nn; printf("%p", "%p", "%p\n", b, &b[0], &b); print

小凡的专栏 3706

决策大模型与生成式大模型有何不同?一文拆解技术框架与落地路径

大模型技术正从内容生成走向复杂场景的智能决策。与生成式大模型拟合概率分布不同,决策大模型以序列决策为核心,融合强化学习机制,在动态环境中感知反馈、持续修正行动路径。其技术框架涵盖语义理解、规划推理与闭环决策,并通过世界模型进行低成本仿真推演,显著提升供应链调度、物流排程等场景的应对效率。实际落地时需结合传统优化算法与人工兜底,构建“语义先导+数值寻优”的分层架构,才能平衡精度与稳定性。这篇内容拆解决策大模型的技术组成、落地路径与常见误区,为企业智能化转型提供可参考的实践框架。

weixin_29057163的博客 188

【C语言指南】数组传参规则详解

在使⽤函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进⾏操作。但数组作为参数传递给函数,不同于普通的变量传参,本篇博客将详细介绍数组传参的规则和实际用法

倔强的石头的博客 7608

5、模型预测控制与分布式MPC控制结构解析

本文深入解析了模型预测控制(MPC)中的双模式预测控制及其稳定性理论,并探讨了分布式MPC的不同控制结构。内容涵盖MPC的基本公式化、性能指标、优化问题以及相关算法步骤,同时比较了集中式MPC、单层分布式MPC和分层分布式MPC的优缺点和适用场景。最后通过流程图和表格形式总结了双模式MPC的算法步骤和控制结构选择思路,并提供了操作建议,以帮助在实际工业系统中更好地应用MPC技术。

tea88的博客 170

Week 9 10 Neural Networks

Week 9 10 Neural Networks

金州饿霸吃不饱的博客 404

c/c++:数组做函数参数,传入函数的首地址,相当于传址,指针做函数返回值,数组止做c语言中函数的返回值

c/c++:数组做函数参数,传入函数的首地址,相当于传址,指针做函数返回值,数组做函数禁止做c语言中函数的返回值

weixin_46838716的博客 2035

本地 AI 自由!OpenClaw+Ollama 双系统部署教程(Windows/Linux),零成本离线跑大模型

本文详细介绍了如何在Windows和Linux双系统中部署OpenClaw AI助手,并通过Ollama对接本地大模型实现完全离线使用。教程包含环境准备、OpenClaw安装配置、Ollama本地模型部署、系统对接等完整流程,特别强调隐私安全和零Token消耗的优势。针对不同操作系统提供具体命令,并给出常见问题解决方案,即使是新手也能快速搭建专属本地AI助手。最终实现的方案无需联网、无使用成本,且能保障数据隐私安全。

2501_93651177的博客 7231

C语言数组作为函数参数

一:数组元素作为函数的实参 数组元素就是变量,与普通变量没有区别,将数组元素传送给形参,实现单向的值传递。 #include &lt;stdio.h&gt; float max(float x,float y){ if(x &gt; y) return x; else return y; } int main(){ int a[6] = {3,2,1,4,9,0}; int m ...

lishundi的博客 7万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++中如何将数组作为函数参数

1.一维数组做函数参数 void func(int array[]) 声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[ ]这样的形式表示array是一维数组的名字,用来接收实参传来的地址。因此,array【 】中的数值并无实际作用,编译系统对一维数组【】内的内容不予处理,形参一维数组的声明中可以写参数个数,也可以不写。函数首部的下面几...

Shrimp_millet 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数组作为函数参数使用方法总结

C/C++数组作为函数参数使用方法总结 一维数组作为函数参数的三种方法: 方法1:形参与实参都用数组; 方法2:形参与实参都用对应数组的指针; 方法3:实参用数组名,形参用引用; 二维数组作为函数参数的四种方法: C/C++语言中把二维数组看作1个特殊的一维数组,它的数组元素又是1个一维数组。二维数组的存储也是按照一维数组来处理的,二维数组按照行展开的方式按顺序存储;所以在利用二维数组作为参数...

u012507022的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++中数组作为函数参数的注意问题

C++中数组作为函数参数的注意问题 1 问题引入 从《剑指Offer》上的相关问题,下面的输出是什么? #include<iostream> using namespace std; int GetSize(int data[]) { return sizeof(data); } int main() { int data1[] = {1,2,3,4,5}; int size1 = sizeof(data1); int *data2 = data1;

zou_albert的博客 5983

将数组作为函数参数调用

数组作为参数在函数中被调用的写法

Azure_stars的博客 1万+

数组名作为函数参数

<br />  用数组名做函数参数与用数组元素作实参有几点不同:<br />(1)用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。用数组名作函数参数时,则要求形参和相应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参两者类型不一致时,机会发生错误。<br />(2)用普通变量或下标变量作函数参数时,形参变量和实参变量都是由编译系统分

aci353的专栏 1万+

C语言 数组作为函数参数

C语言 数组作为函数参数

qq_48516121的博客 6782

C语言数组、结构体、结构体数组作为函数参数

数组作为函数参数 如果想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组? 调用函数时实际传递的是一个指针,所以函数的形参实际上是一个指针,但为了使程序员新手更容易上手一些,编译器也接受数组形式的函数形参。因此,下面这两个函数原型是相等的: int strlen(char *string); int strlen(char string[]); 结构体作为函数参数 举例结构体: typedef struct { char product[20]; } trans

chingax_csdn 1万+
上一篇: 使用指针输出二维数组的任意元素
下一篇: 函数指针
KnowBug
博客等级 码龄9年 8粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值