用数组名作为函数参数

本文介绍了C语言中数组名作为函数参数的使用,强调了实参是数组对象,传递的是数组首元素地址。同时探讨了结构体定义、结构体指针以及如何通过typedef简化结构体声明。通过示例代码,阐述了结构体指针的赋值和访问结构体成员的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、用数组名作为函数参数

1.1 实参与形参概念

  1. 比如你定义一个函数void add(int a, int b),这里的a和b就是形参。
  2. 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。

1.2 形参是数组 实参应该是什么?

如果形参是数组,那么实参是数组对象. 例如: void fun(int a[],int count); 参数一:表示的是int 型数组
参数二:表示传入的数组的个数 调用函数: int a[3] = {1,0,1}; fun(a,3) 这个时候 a 就是数组对象 重点:
数组对象和指针确实在某些时候能够相互转换,但是他们两个是不相同的两个概念

f(int arr[],int n)
但是编译时是将arr按指针变量处理的,相当于将函数f的首部写成
f(int*arr,int n)
以上两种都是等价的

1.3 小结

  C语言调用函数时虚实结合的用法都是采用“值传递”方式,当用变量名作为函数参数时,传递的是变量的值,当用数组名作为函数的参数时,由于数组名代表的是数组首元素地址,因此传递的值是地址,所以要求形参为指针变量。

2、结构体指针:

2.1 结构体定义

  下面代码解释为:关键字是struct它表明跟在后面的是一个结构,后面student表示一个标记,可以用这个标记来引用这种结构,struct student student1;student1使我们创建的一个结构体变量,该变量的结构布局是student

struct student{
	int num;
	char name[20];
	char sex;
	int age;
	float score;
	char addr[30];
}

2.2 为结构体声明定义别名

  可以采用typedef 为复杂的声明定义简单的别名,简单写法可以不写student,在struct前面加上typedef 于是定义结构变量就可以写成:Stu student1;

typedef struct
{
   int no;
   char name[12];
}Stu;
Stu student1;
//定义结构指针可以写成:
Stu *student1;

2.3 结构体指针

  下面代码中cjq_event_record是结构体指针,给结构体指针赋地址可直接通过结构体指针访问该地址对应的内存

typedef struct
{
	INT32U event_idx[MAX_CJQ_EVENT_NUM];
	INT8U event_start_time[MAX_CJQ_EVENT_NUM][6];//YYMMDDHHMMSS反过来存
	INT8U event_end_time[MAX_CJQ_EVENT_NUM][6];

	CJQ_ENENT_VALUE event_value[MAX_CJQ_EVENT_NUM];     //超限值
	INT8U event_happend;    //发生标志
}CJQ_ENENT_RECORD_UNIT;//事件记录结构体  

CJQ_ENENT_RECORD_UNIT *cjq_event_record = NULL; 
CJQ_ENENT_RECORD_UNIT cjq_temp_event_record[MAX_SENSOR_NUM];
CJQ_EVENT_newest_idx[CJQ_EVENT_3E10] = sensor_idx;//记录序号
//给结构体指针赋地址,一个类型为T的指针移动,是以sizeof(T)为移动单位。
cjq_event_record = cjq_temp_event_record + CJQ_EVENT_newest_idx[CJQ_EVENT_3E10];
//通过结构指针读取对应内存
cjq_event_record->event_idx[0];//	通过结构体指针,提取内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值