数组作为函数参数

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

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

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[] “。就是和数组是一样的。变来变去,取自己喜欢的一种即可。

还有一种写法,如下图:

这种写法实际处理函数只针对某一个结构体(传进来的那个结构体)操作。

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

C语言数组、结构体、结构体数组作为函数参数相关推荐

  1. C语言高级编程:i++ 或 ++i作为函数参数

    测试机:Ubuntu14.04 x86_64 1. 代码: #include <stdio.h>void print(int a, int b, int c) {printf(" ...

  2. 【结构体】 结构体引用、结构体数组指针、包含结构的结构体

    目录 一.概念.变量的定义 初识结构体 结构体变量的定义.引用结构体类型的初始化 二.结构体的数组 认识结构体数组 初始化结构体数组 三.结构体指针 初识结构体指针 指向结构体数组的指针 结构体作为函 ...

  3. c语言函数的参数是结构变量,何去运用结构体变量和结构的变量的指针作为函数的参数...

    在C语言中我们如何去运用结构体变量和结构的变量的指针作为函数的参数呢,其实我们对于结构体的变量是有一定的了解的,他们就是将一个结构体变量的值传递给另外一个函数,那么这种有三种方法,希望大家都能够了解一 ...

  4. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

    文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...

  5. C语言学习笔记11-结构体(struct、结构作为函数参数、结构数组)、联合体/共用体typedef; union(大、小端序)

    C语言-结构类型 程序中的数据都需要有类型支撑,当数据很复杂时(不是简单的一个值,如时间信息:年月日时分秒6个数据需要作为一个整体),我们需要声明一个新的结构类型来描述这种复合的数据(可以包含很多不同 ...

  6. c语言将结构体存储在数组中,结构体数组方法用法 _C语言-w3school教程

    C语言 的 结构体数组 在C语言编程中可以将一系列结构体来存储不同数据类型的许多信息. 结构体数组也称为结构的集合. 我们来看一个数组结构体的例子,存储5位学生的信息并打印出来.创建一个源文件:str ...

  7. C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)

    1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...

  8. 【C语言】深度探索offsetof,解析结构体的成员数组和指针

    目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...

  9. go语言json字符串解析为结构体数组,结构体指针的数组

    废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...

  10. C语言高级编程:结构体中定义数组的“妙用”

    1. 说明 1)相同类型结构体变量可以直接赋值 2)在结构体中定义一个数组,可以用赋值语句拷贝整个数组,这也是数组间赋值的一个间接实现方式 3)在结构体中定义一个数组,可以传值调用的方法把它传递给函数 ...

最新文章

  1. android不支持http,关于新版Android SDK-23不支持HttpClient
  2. 两种底层数据层操作时的架构方式,你喜欢那种?
  3. linux命令之查看动态库符号-nm
  4. hadoop大数据集群完全分布式部署实操篇:HDFS2.9.2、HBASE2.2.6、YARN2.9.2、SPARK2.4.7,ZOOKEEPER3.6.2
  5. JavaScript进阶学习(二)—— 基于原型链继承的js工具库的实现方法
  6. oracle中的存储过程
  7. java 16进制Util转换类
  8. ASP.NET MVC Framework体验(4):控制器
  9. Android 中文 API (20) —— DatePicker
  10. unity天空盒渐变,Unity 3D从一个天空盒淡入另一个天空盒
  11. 宇视摄像机如何快速计算存储容量?
  12. 光纤通道与以太网交换机之间有什么区别呢?
  13. 【BZOJ2037】Sue的小球(动态规划)
  14. 失语者的狂欢,觉醒者的自焚 ——《杀生》影评
  15. 苹果开发者账号的那些坑
  16. Maya 2013 下载以及破解教程
  17. 2022必读的5篇行业趋势报告(内附下载)
  18. c加加中print是什么意思_钻石净度中的vs什么意思?
  19. LoadRunner性能测试结果分析样例
  20. 怎样清理苹果电脑磁盘空间_Macbook苹果电脑提示磁盘空间不足怎么办【解决方法】...

热门文章

  1. 【Excel高效工作3】VLOOKUP函数实例使用(二):精确匹配进阶——反向查找,多条件查找 / 模糊匹配的使用
  2. i.MX8芯片介绍(米尔电子iMX8系列核心板及开发板学习笔记)
  3. 数据科学分布——正态分布
  4. 斐波那契数列递归算法
  5. android 虚拟机键盘无法使用问题解决办法
  6. 【17】SCI易中期刊推荐——计算机信息系统电子与电气(中科院4区)
  7. Ubuntu虚拟机设置共享文件夹
  8. 半夜,我差点儿揍了十年前的自己
  9. 破解PHPstorm
  10. MyBatis增强器——Mybatis-Plus