【C语言】函数(二):函数调用与链式访问

目录

  • 函数调用
    • 传值调用
    • 传址调用
    • 练习题
  • 嵌套调用
  • 链式访问

函数调用

函数调用分为传值调用和传址调用

传值调用

传值调用时,函数的形参和实参分别有着自己的内存空间,形参的改变不会影响实参。在上文中说到的利用一个函数实现两个整数的交换的错误写法就是因为我们将它传值调用。

传址调用

传址调用是把函数外部创建的变量的地址传递给函数参数(也就是通过指针访问函数外部的变量)。这样的方式可以让函数与函数外部的变量建立起真正的联系,可以在函数内部直接操作函数外部的变量。在上文中说到的利用一个函数实现两个整数的交换的正确写法就是因为我们将它传址调用。房子里面的内容会变,但房子本身并不会变。

练习题

1.写一个函数判断一个数是不是素数。

#include<stdio.h>
#include<math.h>int is_prime(int x)
{for (int j = 2; j <= sqrt(x); j++) //方法不唯一{if (x % j == 0)return 0; //不是素数返回0}return 1; //是素数返回1
}
int main()
{int i = 0;int n = 0;scanf("%d", &n);for (i = 2; i <= n; i++) //最小的素数是2{if (is_prime(i) == 1)printf("%d ", i);}return 0;
}

2.写一个函数判断某一年是不是闰年。

#include<stdio.h>int is_leap_year(int x)
{return ((x % 4 == 0) && (x % 100 != 0)) || (x % 400 == 0);//满足条件则为真
}
int main()
{int year_start = 0;int year_end = 0;scanf("%d %d", &year_start, &year_end);for (int i = year_start; i <= year_end; i++){if (is_leap_year(i) == 1)printf("%d ", i);}return 0;
}

3.写一个函数,实现整型有序数组的二分查找。

#include<stdio.h>int binary_search(int arr[], int n, int sz)
{int left = 0;int right = sz - 1;while (left <= right){//int mid = (left + right) / 2; //不建议这样,容易导致溢出int mid = left + (right - left) / 2;if (arr[mid] < n){left = mid + 1;}else if (arr[mid] > n){right = mid - 1;}else return  mid;}return -1;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int n = 0;scanf("%d", &n);int sz = sizeof(arr) / sizeof(arr[0]);int result = binary_search(arr, n, sz);if (result == -1)printf("没找到\n");else printf("找到了,下标是%d", result); return 0;
}

嵌套调用

函数与函数之间可以互相调用。

示例:

#include<stdio.h>void fx1()
{printf("hello world\n");
}void fx2()
{for (int i = 0; i < 3; i++){fx1();}
}
int main()
{fx2();return 0;
}

注意:函数可以嵌套调用,但是不能嵌套定义

//错误示范伪代码
int add() //定义add函数
{int x = 0;int y = 0;return x + y;void pt() //定义pt函数{printf("hello world\n");}
}

链式访问

链式访问是把一个函数的返回值作为另外一个函数的参数。

将库函数的返回值作为库函数的参数肯定是最简单的:

//求字符串长度
#include<stdio.h>
#include<string.h>int main()
{//int length = strlen("abcdefg");//printf("%d\n", length);printf("%d\n",strlen("abcdefg"));return 0;
}

我们再来看一个:

#include<stdio.h>int main()
{printf("%d", printf("%d", printf("%d", 43)));//没空格printf("\n");printf("%d ", printf("%d ", printf("%d ", 43)));//有空格return 0;
}

没空格和有空格这两行输出的结果一样吗?
在这里插入图片描述
我们发现结果并不一样,打开cpluspluss网站,搜索printf:
在这里插入图片描述
所以说,printf的返回值是打印在屏幕上字符的个数,分析一下:
在这里插入图片描述

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

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

相关文章

Spring Boot中配置文件生效位置

1. 配置文件位置 首先小伙伴们要明白&#xff0c;Spring Boot 默认加载的配置文件是 application.properties 或者 application.yaml&#xff0c;properties优先级高于yaml。默认的加载位置一共有五个&#xff0c;五个位置可以分为两类&#xff1a; 从 classpath 下加载&…

css取消移动端长按元素背景色

在开发微信小程序的时候&#xff0c;发现有的元素长按之后&#xff0c;出现了讨厌人的背景色&#xff0c;这就很奇怪&#xff0c;就想把它去掉&#xff0c;所以这里教一下方法&#xff1a; 在所在元素添加css样式&#xff1a; // 取消长按的背景色-webkit-tap-highlight-color:…

【数据结构】链表的八种形态

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 链表的三大"性状" 一.带头链表和不带头链表 头指针与头结点的异同 头指针 头结点 二.循环链表和非循环链表 三.双向链表和单向链表 链表的八大形态 结语…

汇编-指针

一个变量如果包含的是另一个变量的地址&#xff0c; 则该变量就称为指针(pointer) 。指针是操作数组和数据结构的极好工具&#xff0c;因为它包含的地址在运行时是可以修改的。 .data arrayB byte 10h, 20h, 30h, 40h ptrB dword arrayB ptrB1 dword OFFSET arrayBarray…

5 个适用于 Linux 的开源日志监控和管理工具

当Linux等操作系统运行时&#xff0c;会发生许多事件和在后台运行的进程&#xff0c;以实现系统资源的高效可靠的使用。这些事件可能发生在系统软件中&#xff0c;例如 init 或 systemd 进程或用户应用程序&#xff0c;例如 Apache、MySQL、FTP 等。 为了了解系统和不同应用程序…

AIOps探索 | 应急处置中排障的降本增效方法探索(上)

文章来源&#xff1a;公众号ID-布博士&#xff08;擎创科技资深产品专家&#xff09; 哈喽~友友们大家好&#xff0c;最近运维界也是蛮热闹的&#xff0c;前有语雀多次崩溃&#xff0c;后有阿里全系产品集体故障&#xff0c;不管是哪种&#xff0c;都足够逼疯一个运维工程师。…

Java修仙记之记录一次与前端女修士论道的经历

文章开始之前&#xff0c;想跟我念一句&#xff1a;福生无量天尊&#xff0c;无量寿佛&#xff0c;阿弥陀佛 第一场论道&#xff1a;id更新之争 一个天气明朗的下午&#xff0c;前端的小美女长发姐告诉我&#xff1a;嘿&#xff0c;小后端&#xff0c;你的代码报错了 我答道&am…

LeetCode算法心得——打家劫舍(记忆化搜索)

大家好&#xff0c;我是晴天学长&#xff0c;准备开始深入动态规划啦&#xff0c;先从记忆化搜索开始&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃…

神经网络常用激活函数详解

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

科技界年度大戏剧情终结:Open AI宣布ChatGPT创始人奥特曼回归

就在刚刚&#xff0c;在Sam Altman在X平台表示&#xff1a; 我喜欢 Openai&#xff0c;过去几天我所做的一切都是为了让这个团队及其使命保持一致。当我决定在周日晚上加入微软时&#xff0c;很明显这对我和团队来说是最好的道路。在新董事会和 w satya 的支持下&#xff0c;我…

1.Gin 介绍

1.Gin 介绍 介绍 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;如果你是性能和高效的追求者&#xff0c;我们推荐你使用 Gin 框架。 Gin 最擅长的就是 Api 接口的高并发&#xff0c;如果项目的规模不大&#xff0c;业务相对简单&a…

Linux:进度条(小程序)以及git三板斧

Linux小程序&#xff1a;进度条 在实现小程序前我们要弄清楚&#xff1a; 1.缓冲区&#xff1b; 2.回车与换行。 缓冲区&#xff1a; 分别用gcc来编译下面两个程序&#xff1a; 程序一&#xff1a; #include <stdio.h> int main() { printf("hello Makefil…

飞瓜数据B站丨B站UP主11月第3周榜单排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年11月13日-11月19日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营…

云备份——初步认识及环境搭建

文章目录 整体功能简介云备份功能实现目标服务器程序负责功能细分服务端模块划分客户端功能细分客户端模块划分 环境搭建gcc安装 jsoncppbundle库 与 httplib库安装 整体功能简介 云备份功能 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中 并且能够通过浏…

基于Apache部署虚拟主机网站

文章目录 Apache释义Apache配置关闭防火墙和selinux 更改默认页内容更改默认页存放位置个人用户主页功能基于口令登录网站虚拟主机功能基于ip地址相同ip不同域名相同ip不同端口 学习本章完成目标 1.httpd服务程序的基本部署。 2.个人用户主页功能和口令加密认证方式的实现。 3.…

Spring框架学习 -- 核心思想

目录 (1) Spring是什么? (2) 什么是IOC容器? (3) 从传统开发认识spring (4) 这种传统开发的缺陷 (5)解决传统开发中的缺陷 (6) 对比总结规律 (7) 理解IOC 创作不易多多支持 (1) Spring是什么? 我们常说的Spring的全称是: Spring Framework(Spring框架), 它是一个开源…

【广州华锐互动】VR防溺水安全内容体验提高群众防溺水意识

在全球各地&#xff0c;溺水是导致儿童和青少年死亡的主要原因之一。据世界卫生组织的统计&#xff0c;全球每年有超过36万人因溺水而死亡&#xff0c;其中大部分是儿童和青少年。因此&#xff0c;提供有效的防溺水教育和培训至关重要。随着科技的发展&#xff0c;虚拟现实&…

CF 1894A 学习笔记 思维 题意理解分析

原题 A. Secret Sport time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standard output Lets consider a game in which two players, A and B, participate. This game is characterized by two positive integer…

MyBatis Generator 插件 详解自动生成代码

MyBatis Generator&#xff08;MBG&#xff09;是MyBatis和iBATIS的代码生成器。可以生成简单CRUD操作的XML配置文件、Mapper文件(DAO接口)、实体类。实际开发中能够有效减少程序员的工作量&#xff0c;甚至不用程序员手动写sql。 它将为所有版本的MyBatis以及版本2.2.0之后的i…