学C的第十天(继续深入学习函数:函数的嵌套调用,链式访问,声明和定义;函数递归:了解递归和其两个条件;练习:1.接收并打印整形值、2.时变不用临量求字符串长度、3.求n的阶乘、4.求第n个斐波那契数)-1

简介: (上期练习第4题)(4).写一个函数,每调用一次这个函数,就会将num的值增加1:(第一种方法:使用指针变量)

(上期练习第4题)(4).写一个函数,每调用一次这个函数,就会将num的值增加1:

(第一种方法:使用指针变量)

//写一个函数,每调用一次这个函数,就会将num的值增加1:
//改变了实参的值,要使用地址变量
#include <stdio.h>
void test(int* p)
{
  (*p)++; // (复习)*:说明p是指针变量
  // 此时 *p 去取num的地址,所以相当于num
}
int main() 
{
  int num = 0;
  test(&num); // 调用一次test()这个函数,将num的值增加1
  test(&num); // 函数参数为变量地址,用于在函数中改变实参的值 
  printf("%d\n", num);
  return 0;
}

image.png

(第二种方法:使用return返回值)

//写一个函数,每调用一次这个函数,就会将num的值增加1:2
#include <stdio.h>
int test(int n)
{
  return (n + 1);
}
int main() 
{
  int num = 0;
  num = test(num);
  num = test(num);
  printf("%d\n", num);
  return 0;
}

e38b32a1e42c4f4faa3ce045d44c44e0.png

(该方式较啰嗦,使用num传值又使用num被赋值)


6.函数的嵌套调用和链式访问:

函数和函数之间是可以根据实际的需求进行组合的,也就是互相调用。


6.1 嵌套调用:在函数定义中调用别的已声明定义函数

(各种函数类似各种零件,把各种函数嵌套调用,就像把各种零件相互组装

4f65473b133c4989becc91de1cab57e6.png

[注意:可以嵌套调用,但是不能嵌套定义(在函数定义中声明定义并使用别的函数)]


image.png

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

//链式访问
#include <stdio.h>
#include <string.h>
int main() 
{
  printf("%zd\n", strlen("abcdef"));
  return 0;
}

image.png

(帮助理解案例:)

//链式访问(“4321”)
#include <stdio.h>
int main() 
{
  // printf()函数的返回值是 字符串的个数 (重点)
  printf("%d", printf("%d", printf("%d", 43)));
  return 0;
}

de7fa877f1e245779233c22d934523aa.png

(“多打印一个空格后”:)

//链式访问(“4321”+ 空格)
#include <stdio.h>
int main() 
{
  // printf()函数的返回值是 字符串的个数 (重点)
  printf("%d ", printf("%d ", printf("%d ", 43)));
  return 0;
}

fdd91356a8814312878740e459cedec3.png

7.函数的声明和定义(用途广泛):

7.1 函数声明:

(1).告诉编译器有一个函数叫什么参数是什么返回类型是什么。但是具体是不是存在(可能只声明了但未定义)函数声明决定不了

(2).函数的声明一般出现在函数的使用之前。要满足先声明后使用

(补充:声明时形参也可以不写,只写参数类型和个数即可)

//函数声明:告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。
//但是具体是不是存在(可能只声明了但未定义),函数声明决定不了。
#include <stdio.h>
//函数声明:
//函数的声明一般出现在函数的使用之前。要满足先声明后使用。
int Add(int x, int y);
int main() 
{
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d", &a, &b);
  //加法函数:
  int c = Add(a, b);//函数调用
  //打印
  printf("%d\n", c);
  return 0;
}
//函数的定义:
int Add(int x, int y)
{
  return x + y;
}


image.png

(像上图这种情况,函数定义主函数下面,这时如果主函数上面没有该函数的声明,运行时系统会报警告

(3).函数的声明一般要放在头文件里。(分模块编程)

//add.h:
//函数的 声明 放在头文件中
int Add(int x, int y);
//add.c:
//函数 定义 放在对应的c文件里
int Add(int x, int y)
{
  return x + y;
}
// 主程序:
//分模块去编程,方便协作,最后做整合
//可以把代码的实现和声明分离
#include <stdio.h>
#include "add.h" // 调用对应的头文件,
//相当于对相应的函数进行了声明
int main()
{
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d", &a, &b);
  //加法函数:
  int c = Add(a, b);
  //其它源文件内定义的函数具有 外部连接属性 ,
  //可直接调用 ,(之前staic讲过)
  //打印
  printf("%d\n", c);
  return 0;
}

image.png

(4).设置静态库:(代码保密)

image.png

(设置完后,执行程序,会生成一个对应的.lib文件,是一个二进制文件,包含函数定义的内容,文件点开后显示的是乱码。进行交易时可以提供给买家 .lib文件 和 .h头文件,头文件告诉有什么函数和函数怎么使用,买家只知道怎么使用里面的函数,但不知道具体是怎么实现的。)

(5).导入静态库:

// .lib - 静态库
// 导入静态库:(假设静态库名称为"add.lib")
#pragma comment(lib, "add.lib")

7.2 函数定义:

(1).函数的定义是指函数的具体实现交待函数的功能实现

3dd9c4371a054540a6152a66f6f35445.png

(2).函数定义也是一种特殊的声明。(把函数定义写在主函数之前)

#include <stdio.h>
//函数的定义:
int Add(int x, int y)
{
  return x + y;
}
int main()
{
  int a = 0;
  int b = 0;
  //输入
  scanf("%d %d", &a, &b);
  //加法函数:
  int c = Add(a, b);//函数调用
  //打印
  printf("%d\n", c);
  return 0;
}

db81edecc9a145e8b81a1313fec66428.png

相关文章
|
9天前
|
人工智能 安全 API
CoPaw:5分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
12天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
13978 106
|
7天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
10399 22
|
9天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
10056 37
|
4天前
|
人工智能 安全 前端开发
Team 版 OpenClaw:HiClaw 开源,5 分钟完成本地安装
HiClaw 基于 OpenClaw、Higress AI Gateway、Element IM 客户端+Tuwunel IM 服务器(均基于 Matrix 实时通信协议)、MinIO 共享文件系统打造。
4328 7
|
11天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
8154 20
|
5天前
|
人工智能 JavaScript 测试技术
保姆级教程:OpenClaw阿里云及本地部署+Claude Code集成,打造全能 AI 编程助手
在AI编程工具百花齐放的2026年,Anthropic推出的Claude Code凭借72.5%的SWE-bench测试高分、25倍于GitHub Copilot的上下文窗口,成为开发者追捧的智能编程助手。但单一工具仍有局限——Claude Code擅长代码生成与审查,却缺乏灵活的部署与自动化执行能力;而OpenClaw(前身为Clawdbot)作为开源AI代理框架,能完美弥补这一短板,通过云端与本地双部署,实现“代码开发-测试-部署”全流程自动化。
2701 13
|
6天前
|
人工智能 JSON API
保姆级教程:OpenClaw阿里云及本地部署+模型切换流程+GLM5.0/Seedance2.0/MiniMax M2.5接入指南
2026年,GLM5.0、Seedance2.0、MiniMax M2.5等旗舰大模型相继发布,凭借出色的性能与极具竞争力的成本优势,成为AI工具的热门选择。OpenClaw作为灵活的AI Agent平台,支持无缝接入这些主流模型,通过简单配置即可实现“永久切换、快速切换、主备切换”三种模式,让不同场景下的任务执行更高效、更稳定。
3702 3

热门文章

最新文章