自学第十六天----深入理解函数中

4. 函数的调用:

4.1 传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

4.2 传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

这两种其实就是上次我们说过的形参和实参的实际用法(区别)。

----------------------------------------------------- 华丽的分割线---------------------------------------------------------

写一个函数可以判断一个数是不是素数(用函数实现)

那我们现在来写一个函数实现这个目的

cpp 复制代码
#include<stdio.h>
int is_prime(int n)
{
	int j = 0;
	for (j = 2; j < n; j++)
	{
		if (n % j == 0)
			return 0;
	}
	return 1;
}

这里我们自定义了一个名为is_peime的函数,利用for语句判断n除以j取余数是否为0,来间接判断n是否为素数

cpp 复制代码
int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		if (is_prime(i) == 1)
		{
			count++;
			printf("%d  ", i);
		}
	
	}
	printf("\ncount=%d", count);
	return 0;

}

再利用我们自定义的函数再主函数中进行输出

啪~的一下子就成功勒!

这是完整的代码:

cpp 复制代码
#include<stdio.h>
int is_prime(int n)
{
	int j = 0;
	for (j = 2; j < n; j++)
	{
		if (n % j == 0)
			return 0;
	}
	return 1;
}

int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		if (is_prime(i) == 1)
		{
			count++;
			printf("%d  ", i);
		}
	
	}
	printf("\ncount=%d", count);
	return 0;

}

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

哇乍一看名字看起来好高级啊,(ps:我心想这肯定要费我很多时间学)

我再仔细看看

欸这不不就是《俄罗斯套娃》和《1×400接力》吗

5.1 嵌套调用

cpp 复制代码
#include <iostream>

void innerFunction() {
    std::cout << "This is the inner function." << std::endl;
}

void outerFunction() {
    std::cout << "This is the outer function." << std::endl;
    innerFunction(); // 调用内部函数
}

int main() {
    outerFunction(); // 调用外部函数

    return 0;
}

输出结果为

cpp 复制代码
This is the outer function.
This is the inner function.

函数可以嵌套调用,但是不能嵌套定义。

说白了就是可以在一个函数中可以调用其他函数,但在函数内部不能定义另一个函数。

你想嘛俄罗斯套娃是不是最里面就一个实心的娃娃,

而你外面用不一样大小不一样牌子的套都不影响他最里面的

5.2 链式访问

允许在调用多个函数时,将每个函数的返回值作为下一个函数的参数,以链式的方式连接起来,从而实现连续调用多个函数的效果。

cpp 复制代码
#include <iostream>

class MyClass {
public:
    MyClass& foo(int value) {
        // 进行一些操作
        std::cout << "foo: " << value << std::endl;
        return *this;
    }

    MyClass& bar(int value) {
        // 进行一些操作
        std::cout << "bar: " << value << std::endl;
        return *this;
    }

    MyClass& baz(int value) {
        // 进行一些操作
        std::cout << "baz: " << value << std::endl;
        return *this;
    }
};

int main() {
    MyClass obj;
    obj.foo(1).bar(2).baz(3); // 使用链式访问调用多个函数

    return 0;
}

这不就是跑步接力嘛。。。搞这么高级的名字唬人 ><

6. 函数的声明和定义

6.1 函数声明:

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

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

  3. 函数的声明一般要放在头文件中的。

格式是:

---先声明:返回类型 函数名(参数列表);

---再定义 返回类型 函数名(参数列表) {// 函数的代码逻辑}。

6.2 函数定义:

函数的定义是指函数的具体实现,交待函数的功能实现。

其实就是先在最前面让别人知道你使用了这个函数,然后后面再进行常规定义,我觉得呢这样的好处就是在代码很长的时候就可以快速查找使用的函数

相关推荐
hipolymers14 分钟前
C语言怎么样?难学吗?
c语言·数据结构·学习·算法·编程
2501_933329552 小时前
企业级舆情监测系统技术解析:Infoseek数字公关AI中台架构与实践
开发语言·人工智能·自然语言处理·架构
Wave8452 小时前
C++继承详解
开发语言·c++·算法
Tairitsu_H2 小时前
C++类基础概念:定义、实例化和this指针
开发语言·c++
.柒宇.2 小时前
Java八股之反射
java·开发语言
环流_2 小时前
多线程1(面试题--常见的线程创建方式)
java·开发语言·面试
不想写代码的星星3 小时前
C++17 string_view 观察报告:好用,但有点费命
c++
努力努力再努力wz3 小时前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz3 小时前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
Han_han9193 小时前
常用API:
java·开发语言