数组作为函数参数

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

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

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. darknet53网络结构及配置文件对比
  2. 简单示例立马搞懂Java日期格式中yyyy-MM-dd HH:mm:ss和YYYY-MM-dd hh:mm:ss的区别
  3. Nancy跨平台开发总结(三)发布到Jexus Web服务器
  4. 计算机一级b考试教程,全国计算机等级考试一级B教程
  5. 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2 1 4
  6. 一次性搞清Java中的类加载问题
  7. HDU 4946 Area of Mushroom 凸包 第八次多校
  8. 清华排名首登亚洲第一,今年财务预算300亿
  9. 计算机毕业设计中用Java+Html+MySQL 实现注册、登录(servlet框架)-(二
  10. phpstud使用教程_phpStudy2017使用教程,自定义php版本功能上线!
  11. opencv程序在未安装opencv环境下运行方法总结
  12. DataSet自定义添加table并添加数据
  13. C++ UPD广播异步发包工具
  14. 脊柱外科患者资料管理系统
  15. Spring Cloud 与 Dubbo 优缺点详解
  16. 第15章卡方检验:拟合优度和独立性检验
  17. 华为交换机重制_华为交换机恢复出厂设置的三种方法
  18. P1567 统计天数(C语言)
  19. 光纤收发器在安装使用过程所遇到的问题及解决办法
  20. 实验1 进程管理实验-计算机操作系统

热门文章

  1. 【报告分享】2021中国人工智能应用趋势报告.pdf(附下载链接)
  2. 网约车监管信息交互平台启动试运行
  3. RNN, LSTM, GRU, SRU, Multi-Dimensional LSTM, Grid LSTM, Graph LSTM系列解读
  4. 甜齁你的情人节糖果促销海报设计
  5. Head First Java读书笔记(二)
  6. WEB开发 十进制RGB颜色转化为标准代码或十六进制
  7. 推荐!Windows XP实用技巧44条(二)
  8. Word文字水印如何操作添加?分享技巧!怎么在word加入图片水印?
  9. ttf字体库文件转换成base64 的css文件
  10. 第四次作业 简易计算器