c语言的数组怎么传递到函数里面

#include<bits/stdc++.h>
using namespace std;
typedef struct{
	char name[100];
	char id[100];
	char sex;
	int year,mon,day;
	double C,M,E; 
	double sum,ave;
}student;//先弄好结构 

void input(student *p){
	scanf("%s %s %c",p->id,p->name,&p->sex);
	scanf("%d %d %d",&p->year,&p->mon,&p->day);
	scanf("%lf %lf %lf",&p->C,&p->M,&p->E);
	p->sum=p->C+p->M+p->E;
	p->ave=p->sum/3;
}//输入 

void output(student *p){
	printf("%s %s %c ",p->id,p->name,p->sex);
	printf("%d %d %d ",p->year,p->mon,p->day);
	printf("%.1f %.1f %.1f ",p->C,p->M,p->E);
	printf("%.1f %.1f\n",p->ave,p->sum);	
	
}//输出 

void outputArray(student *p,int n)
{
	
	for(int i=0;i<n;i++){
		output(&p[i]); 
	}
}//对应List 

int find(student *p,int n,char id[])
{
	for(int i=0;i<n;i++){
		if(strcmp(p[i].id,id)==0){
			return i;
		}
	}
	return -1;
 } 
 
int main()
{

	char order[100];//字符串长度
	student s[100];
	char id[100];
	student temp;
	int i,index,n=0;
	i=0;
	while(1){
	
		scanf("%s",order);	
		if(strcmp(order,"Insert")==0){
			input(&temp);//开始调用函数 
			printf("Insert:\n");
			index=find(s,i,temp.id);//(注意这里)也可以写成find(&s[0],i,temp.id) 
			if(index==-1){
				s[i]=temp;
				output(&s[i]);
				i++;
			}//需要修改的为题  不存在学号为id的学生无法输出failed 
			else{
				printf("Failed\n");
			}
		}//上面的代码是查找 下面才是改变 
			else if(strcmp(order,"Delete")==0){
			     scanf("%s",id);
	        	 index=find(&s[0],i,id);
	        	 printf("Delete:\n");
	        	 if(index==-1){
	        	 	printf("Failed\n");
	        	 }
	        	 else{
				     printf("Deleted\n");
				     for(n=index;n<=i-1;n++){
				     	s[n]=s[n+1]; 
				     }
			     	 i--;
				 }
		}
		else if(strcmp(order,"Change")==0){
			printf("Change:\n");
			input(&temp);	
			index=find(&s[0],i,temp.id);//   get新知识点!!!  find(s,5)==find(&s[0],5)// 也就是将第一个指针传过去, 并带上长度 
			if(index!=-1){
				s[index]=temp;
				output(&s[index]);
			}
			else{
				printf("Failed\n");
			}
		}
		else if(strcmp(order,"Find")==0){
			scanf("%s",id);
			printf("Find:\n");
			index=find(s,i,id);
			if(index==-1){
				printf("Failed\n");
			}
			else{
				output(&s[index]);
			}
		}
	
		
		//k=index s=s n=i
			else if(strcmp(order,"List")==0){
			printf("List:\n");
			outputArray(s,i);
		}//输出所有学生 
	
		else if(strcmp(order,"Quit")==0||strcmp(order,"Exit")==0){
			printf("Good bye!\n");
			break;
		} 

	}
	return 0;
}

作者个人认为,一个程序员想要走的多远,就应该有多深的基础,这次我小小的分享一个小知识点,也就是数组传递到函数要怎么传递

 

很多人都会遇到这样的函数

比如

int s[4];

find(s,5);

其实这就只是把第一个指针传过去,并带上长度,仅此而已;

所以我这里写另一个更浅显易懂的格式

int s[4];

find(&s[0],5)

下面带上一题有点长的例题

 

2000-删除学生信息

时间限制: 1000 毫秒   内存限制: 32768 K字节
判题规则:严格比较

问题描述

 

请设计一个简单的学生成绩管理系统,要求系统实现以下功能: 插入一个学生的信息: 插入学生信息: Insert id name sex year month day x y z, 其中的参数分别为学号、姓名、性别、 出生日期(年、月、日)、三门课的成绩,成绩为浮点数。 按输入顺序输出学生信息 List 查找学生信息: Find id 查找学号为id的学生信息。 修改学生信息: Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 把学号为id的学生信息修改为 newname,newsex,newyear,newmonth,newday,newx,newy,newz(学号保持不变) 删除学生信息: Delete id 删除学号为id的学生信息 退出程序:Quit或者Exit 请注意:姓名的长度不超过20。

输入

 

输入有多行,每行一条指令,指令格式如下: Insert id name sex year month day x y z 其中的参数分别为学号、姓名、性别、出生日期(年、月、日)三门课的成绩,成绩为浮点数。 List 按输入的顺序输出所有学信息。 Find id 查找学号为 id 的学生信息。 Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 把学号为id的学生信息修改为 newname,newsex,newyear,newmonth,newday,newx,newy,newz(学号保持不变) Delete id 删除学号为id的学生信息 Quit或者Exit 输出"Good bye!"后结束程序。

输出

 

输出有多行,对应命令的输出如下: Insert id name sex year month day x y z 插入后在单独的一行中输出"Insert:",如果链表中不存在相同学号的学生信息,在第二行中显示学生信息, 格式: id name sex year month day x y z ave sum,分别为学号、姓名、性别、 出生日期(年、月、日)和三门课(语文、数学、英语)的成绩,平均成绩和总成绩, 数据之间用一个空格分开,成绩保留1位小数。 否则,输出"Failed" List 输出"List:"后,按输入顺序输出所有学生的信息,格式与插入学生信息后输出的格式相同。 Find id 第一行显示”Find:",第二行显示格式如下: 如果找到学号为id的学生,则在单独一行中显示学生信息, 格式如List。否则在单独一行显示"Failed"。 Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 第一行显示"Change:"。如果链表中不存在学号为id的学生,显示"Failed"。 否则修改该学生信息并在单独一行中显示该生信息,显示格式如List命令。 Delete id 第一行显示"Delete:"。如果链表中不存在学号为id的学生,显示"Failed"。 否则删除该学生信息并在单独一行中显示"Deleted" Quit或者Exit 在单独一行中输出"Good bye!"后结束程序。

输入样列

Insert 0911001 zhangsan F 1992 3 24 87 78 65
Insert 0911003 Lisi F 1992 5 3 77 72 55
Find 0911002
Find 0911003
Insert 0911002 zhaoliu F 1993 8 8 97 90 55
List
Insert 0911001 zhangou M 1992 3 24 98 78 65
Change 0911002 zhaoliu M 1990 9 9 90 91 92
Change 0911005 zhaoliu M 1990 9 9 90 91 92
Delete 0911001
List
Delete 0911006
Insert 0911005 Wangrong F 1990 12 12 68 56 100
Find 0911002
Insert 0911004 Wangwu F 1991 9 2 68 56 95
Quit

输出样例

Insert:
0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
Insert:
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
Find:
Failed
Find:
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
Insert:
0911002 zhaoliu F 1993 8 8 97.0 90.0 55.0 80.7 242.0
List:
0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
0911002 zhaoliu F 1993 8 8 97.0 90.0 55.0 80.7 242.0
Insert:
Failed
Change:
0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
Change:
Failed
Delete:
Deleted
List:
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
Delete:
Failed
Insert:
0911005 Wangrong F 1990 12 12 68.0 56.0 100.0 74.7 224.0
Find:
0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
Insert:
0911004 Wangwu F 1991 9 2 68.0 56.0 95.0 73.0 219.0
Good bye!

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abandon-Lv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值