C语言进阶课程学习记录-函数参数的秘密

C语言进阶课程学习记录-函数参数的秘密

    • 实验
    • 实验
    • 小结
    • 调用约定
    • 实验-求平均数
    • 实验-可变参数的函数
    • 小结

本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录

在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int func(int i, int j)
{printf("%d, %d\n", i, j);return 0;
}int main()
{int k = 1;func(k++, k++);//warning: operation on 'k' may be undefined [-Wsequence-point]|printf("%d\n", k);return 0;
}/*
2, 1
3*/

在这里插入图片描述
在这里插入图片描述

实验

#include <stdio.h>int main()
{int k = 2;int a = 1;k = k++ + k++;printf("k = %d\n", k);if( a-- && a ){printf("a = %d\n", a);}return 0;
}/*
k = 6*/

小结

函数的参数在栈上分配空间
函数的实参并没有固定的计算次序
顺序点是C语言中变量修改的最晚时机

调用约定

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实验-求平均数

#include <stdio.h>float average(int array[], int size)
{int i = 0;float avr = 0;for(i=0; i<size; i++){avr += array[i];}return avr / size;
}int main()
{int array[] = {1, 2, 3, 4, 5};printf("%f\n", average(array, 5));return 0;
}/*
3.000000*/

在这里插入图片描述

实验-可变参数的函数

#include <stdio.h>
#include <stdarg.h>float average(int n, ...)
{va_list args;int i = 0;float sum = 0;va_start(args, n);for(i=0; i<n; i++){sum += va_arg(args, int);}va_end(args);return sum / n;
}int main()
{printf("%f\n", average(5, 1, 2, 3, 4, 5));printf("%f\n", average(4, 1, 2, 3, 4));return 0;
}/*
3.000000
2.500000*/

在这里插入图片描述

小结

调用约定指定了函数参数的入栈顺序以及栈的清理方式
可变参数是C语言提供的一种函数设计技巧
可变参数的函数提供了一种更方便的函数调用方式
可变参数必须顺序的访问,无法直接访问中间的参数值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL学习笔记1(MySQL基础)

1.MySQL基础 1.数据库相关概念 ​ *数据库&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储 DtaBase(DB) ​ *数据管理系统&#xff1a;操纵和管理数据库的大型软件 DataBase Management System (DBMS) ​ *SQL&#xff1a;操作关系型数据库的编程语言&#…

初始C++

1. C关键字(C98) C总计63个关键字&#xff0c; C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我们学到以后再 细讲。 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;…

JAVA学习笔记28(常用类)

1.常用类 1.1 包装类 1.包装类的分类 ​ 1.针对八中基本数据类型相应的引用类型–包装类 ​ 2.有了类的特点&#xff0c;就可以调用类中的方法 2.包装类和基本数据类型的转换 ​ *装箱&#xff1a;基本类型 --> 包装类型 //手动装箱 int n1 100; Integer integer ne…

【C语言__函数栈帧的创建和销毁__复习篇9】

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题&#xff1a; 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的&#xff0c;传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

电商平台业务及架构演变史

不少人认为电商系统很简单&#xff0c;因为现在做电商的太多了&#xff0c;看到的电商产品也多。看来看去产品都差不多&#xff0c;没什么特别。 其实中国电商发展已有20多年历史&#xff0c;电商以销售为核心连接着研、产、供、销、服整套的信息系统体系。其中的设计并没有那…

企业公众号数量怎么申请

一般可以申请多少个公众号&#xff1f;许多用户在申请公众号时可能会遇到“公众号显示主体已达上限”的问题。这是因为在2018年11月16日对公众号申请数量进行了调整&#xff0c;具体调整如下&#xff1a;1、个人主体申请公众号数量上限从2个调整为1个。2、企业主体申请公众号数…

vue---计算属性

姓名案例 1.使用插值语法实现 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"&g…

从源码选择到国际化运营:打造成功的跨境电商网站必备指南

跨境电商网站的成功离不开经过精心策划和执行的全面计划。从源码选择到国际化运营&#xff0c;每一步都至关重要。作为跨境电商领域的专家&#xff0c;我将为您提供打造成功跨境电商网站的必备指南&#xff0c;帮助您开拓全球市场&#xff0c;提升边际收入。 选择优质的跨境电…

云服务器ECS选型知多少

云服务器ECS选型知多少 ECS产品规格如何选择实例规格变配 说到云服务器ECS选型&#xff0c;那可以说太重要了。因为对于一个项目来说&#xff0c;从项目到开始到最后的部署上线&#xff0c;每一步都需要付出&#xff0c;这些对于企业或者个人来说都是一笔投入&#xff0c;那么如…

会议预告 | 易基因与您相约2024中国衰老科学大会(附日程) 新品首发

由中国细胞生物学学会衰老细胞生物学分会等单位联合主办&#xff0c;瓯江实验室、温州医科大学老年研究院等共同承办的2024中国衰老科学大会暨国际衰老生物学大会将于2024年4月26日-28日在温州召开。本次大会以“解码衰老”为主题&#xff0c;旨在汇聚全球科研精英&#xff0c;…

全开源商城源码后台php全端uniapp 全开源可二开 功能强大 商城系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 内置8中搭配主色(可自行扩展更多配色)、自由快捷切换适应各大行业需求 已支持小程序&#xff08;微信、QQ、百度、支付宝、头条&抖音、快手&#xff09; H5 APP App.vue中修改 r…

Vue 3响应式系统全解析:深入ref、reactive、computed、watch及watchEffect

一、ref与breactive 宏观角度看&#xff1a; 1.ref 用来定义:基本类型数据、对象类型数据&#xff1b;2.reactive 用来定义:对象类型数据。 区别&#xff1a; 【ref 】创建的变量必须使用.value 。【reactive】 重新分配一个新对象&#xff0c;会失去响应式(可以使用0biect…

EasyMR6.2 全面解读:四大功能深度优化,解锁全新大数据处理和计算体验

在刚刚过去的2024春季发布会上&#xff0c;袋鼠云带来了数栈产品V6.2版本的全新发布。其中&#xff0c;EasyMR 作为数栈V6.2中的一项关键能力&#xff0c;代表了袋鼠云对大数据生态的深入理解和持续创新。 EasyMR&#xff08;后文统称EMR&#xff09;是袋鼠云基于 Hadoop、Hiv…

游戏系统设计目录

《游戏系统设计0》跟我一起做游戏服务器《游戏系统设计一》游戏任务系统太复杂,带你一步一步实现 《游戏系统设计二》操蛋,游戏版本要回滚,还好我机智备份了数据库,代码直接拿走《游戏系统设计三》游戏服务器线上出bug,怎么办?急,在线等!热更新

CH341A/B USB转USART/I2C/SPI介绍

CH341A/B USB转USART/I2C/SPI介绍 &#x1f4cd;CH341官方文档&#xff1a;https://www.wch.cn/downloads/CH341DS2_PDF.html CH341A/B是一个USB总线的转接芯片&#xff0c;通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。 &#x1f341;芯片封装&a…

前端表单input的简单使用

1.代码结构介绍 2.实战效果

统计学-F检验的用途有哪些?

F检验是一种常用的统计检验方法&#xff0c;主要用于以下几个方面&#xff1a; 方差比较&#xff1a;F检验可以用来比较两个或多个样本或组之间的方差是否存在显著差异。例如&#xff0c;在质量控制中&#xff0c;可以使用F检验来确定不同生产批次的方差是否相同&#xff0c;从…

The layered MVP architecture in Acise

Acise是一款CAx软件开发平台&#xff0c;本文给出Acise中的MVP架构模式的实现思路。 注1&#xff1a;文章内容会不定期更新。 MVP Data Model View Model 参考文献 Erich Gamma. Design Patterns:elements of reusable object-oriented software. Addison Wesley, 1994.Josep…

ETL 和 ELT区别-2

T-ETL和ELT区别_tetl-CSDN博客 ETL&#xff08;提取、转换和加载&#xff09;和 ELT&#xff08;提取、加载和转换&#xff09;是企业用来从多个源提取数据并将其组合到单个数据库或数据仓库中进行分析的过程。这两种方法都使用以下步骤&#xff08;但顺序不同&#xff09;来准…

查询服务器上所有SQL SERVER数据库中是否包含某个字段,且该字段是否包含某个值

公司有一堆相同类别的客户&#xff0c;每个客户都部署了相同的一套系统&#xff0c;每套系统对应一个相同结构的数据库&#xff0c;昨天老板让查一下手机号码177xxxxx248是属于哪个客户的客户。 我要查的这个号码来自于oa_member表中的phone字段&#xff0c;我需要对所有的数据…