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

数组作为函数参数

如果想把一个数组名参数传递给函数,正确的函数形参应该是怎样的?它是应该声明为一个指针还是一个数组?

调用函数时实际传递的是一个指针,所以函数的形参实际上是一个指针,但为了使程序员新手更容易上手一些,编译器也接受数组形式的函数形参。因此,下面这两个函数原型是相等的:

int strlen(char *string);
int strlen(char string[]);

结构体作为函数参数

举例结构体:

typedef struct {
	char product[20];
} transaction;
transaction current_trans;	//假设已初始化完成

结构体作为函数参数

void  print_info(transaction trans)
{
	printf("%s\n", trans.product);
}

// 调用方式
print_info(current_trans);

结构体指针作为函数参数

void print_info(transaction *trans)
{
	printf("%s\n", trans->product);
}

// 调用方式
print_info(&current_trans);

结构体数组作为函数参数

我们知道数组作为函数参数的使用方法,那结构体数组本质上也是数组,所以结构体数组作为函数参数的使用方法应该与数组作为函数参数的方法一样。同时我们也知道,下标引用与间接访问完全相同 。下图中函数访问结构体数组是使用下标引用的方式。
在这里插入图片描述
下图是传参另一种方式,同样也是使用下标引用方式:
在这里插入图片描述

即然下标引用与间接访问相同,那间接访问应该如何实现?见下图:
在这里插入图片描述

上图中第 18 行也可以这样写,(* ( cmd+i ) ).name。由于 " * "取值运算符优先级小于 " . "成员选择运算符,所以需要将 *cmd 用括号括起来。

另外,void print_info() 函数的第一个参数也可以这样写 ” str_cmd cmd[] “。就是和数组是一样的。变来变去,取自己喜欢的一种即可。

还有一种写法,如下图:
在这里插入图片描述
这种写法实际处理函数只针对某一个结构体(传进来的那个结构体)操作。

针对不同的应用场景,选择传递合适的参数。


版权声明:本文为CSDN_Gao_16原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。