news 2026/5/30 22:01:40

一段代码教你搞定C语言中函数的知识点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一段代码教你搞定C语言中函数的知识点

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

#include "behand.h"//包含头文件,就可以使用(拷贝内容)
//模块化设计

//静态库:搜索属性将project1编译成静态库lib,将lib和.h文件出售
//导入静态库才可使用 #pragma comment(lib,"文件名")

//函数:子程序,负责完成某项特定的任务,且具备相对独立性
//一般有输入参数和返回值,提供对过程的封装和对细节的隐藏
//函数由函数名,函数参数,返回类型,函数体组成
//函数是可以嵌套调用,但不能嵌套定义

//1.库函数 www.cplusplus.com查看。学会看文档。
//IO函数,字符串操作函数,字符操作函数,数学函数,时间函数...
//库函数的使用必须包含头文件
//2.自定义函数


//函数的定义
//未写返回类型时默认为int(不建议)
int get_max(int x,int y)
{
return (x > y ? x : y);
}

void swap(int* px,int* py)
{
/*
int temp;
temp=px;
px=py;
py=temp;
//为什么功能没有实现?
//x,y均为独立的空间,退出函数时a,b任为原来的空间,所以没有交换
//当实参传递给形参时,形参是实参的一份临时拷贝,对形参的修改不会影响实参
*/
int temp;
temp=*px;
*px=*py;
*py=temp;
}

int ADD(int x, int y)
//不调用函数,形参x,y不占用空间
//调用时才被分配空间,函数结束自动销毁
{
return (x+y);
}

//判断是否为素数
bool sushu(int x)
//bool类型:用来表示真假的变量
{
int i=0;
if (x == 0 || x == 1)
{
return false;
}
for (i=2;i < ((x+1)/2);i++)
//遍历看是否有约数
{
if (x % i == 0)
{
return false;
}
}
if (i == ((x +1)/ 2))
{
return true;
}

}

//判断是否为闰年
void year(int x)
{
if (x % 4 == 0 && (x % 100 != 0 || x % 400 == 0))
{
printf("闰年\n");
}
else
{
printf("不是闰年\n");
}
return 0;
}

int binary_search(int arr[],int k,int sz)//形参arr本质是指针
{
int left=0;
int right=sz-1;
while (left <= right)
{
int mid=left+(right-left)/2;
if (arr[mid] < k)
{
left=mid+1;
}
else if (arr[mid] > k)
{
right=mid-1;
}
else
{
return mid;
}
}
return -1;//找不到
}

void ADD_one(int* x)
{
(*x)++;
return 0;
}

int main() //main函数中是有参数的
{
//文档阅读memset函数功能
char arr[20]="hello world";
memset(arr+1,'x',5);
//memory:内存 set:设置
printf("%s\n",arr);

int a=10;
int b=20;
//链式访问
printf("%d\n", get_max(a,b));//函数的调用

printf("交换前:a=%d,b=%d\n", a, b);
swap(&a,&b);
//&a,&b:实际参数
//将a与b的地址交给函数,这样函数与函数直接在数值上就建立了联系
printf("交换后:a=%d,b=%d\n", a,b);

//实参可以是常量,变量,表达式,函数等
printf("1+2+a+3=%d\n", ADD(ADD(1,2+a),3));
//无论实参是何种类型的值,在进行函数调用时,它们必须要有确定的值,以便把值传给形参

//什么时候传地址,什么时候不传?
//在函数内部是否想改变实参的值

//传值调用:ADD()
//函数的形参与实参分别占用不同的内存块,对形参的修改不会影响实参
//传址调用:swap()
//在函数外部创建变量的内存地址传递给函数参数,使得函数与函数外部的变量建立真正的联系

for (int u = 0;u < 99;u++)
{
if (sushu(u))
{
printf("%d ",u);
}
}
printf("\n");

year(2026);

int arr1[]={1,2,3,4,5,6,7,8,9,10};
int sz=sizeof(arr1)/sizeof(arr1[0]);
//数组传参传的是首元素地址,而不是整个数组,所以在函数内部计算参数部分数组大小是不准确的
int ret=binary_search(arr1,7,sz);

if (ret == -1)
{
printf("找不到\n");
}
else
{
printf("找到了,下标为%d\n",ret);
}

int num=0;
ADD_one(&num);
printf("%d\n",num);

//链式访问的前提是函数有返回值
printf("%d\n",printf("%d",printf("%d",43)));
//printf函数返回值是打印的字符的个数

behand(1);

return 0;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 20:20:49

QQ手机号关联查询技术解密:从协议分析到实战实现

在数字身份验证和社交网络管理中&#xff0c;通过手机号快速查询关联的QQ账号已成为技术开发者的重要需求。本文将深入解析phone2qq工具的技术实现路径&#xff0c;从底层协议通信到安全加密机制&#xff0c;为开发者提供完整的解决方案。 【免费下载链接】phone2qq 项目地址…

作者头像 李华
网站建设 2026/5/30 21:12:35

Qwen3-32B-AWQ:解锁AI双模式推理新体验

Qwen3-32B-AWQ&#xff1a;解锁AI双模式推理新体验 【免费下载链接】Qwen3-32B-AWQ 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-32B-AWQ 导语 阿里达摩院最新发布的Qwen3-32B-AWQ模型通过创新的"思考/非思考"双模式切换能力&#xff0c;重新定…

作者头像 李华
网站建设 2026/5/30 17:02:57

快速理解ARM开发中的电源管理驱动机制

深入ARM电源管理&#xff1a;从CPU休眠到系统级挂起的实战解析你有没有遇到过这样的问题&#xff1a;设备明明“睡着了”&#xff0c;电流却下不来&#xff1f;或者按下电源键唤醒后屏幕黑屏、外设失灵&#xff1f;又或者在低功耗设计中&#xff0c;费尽心思优化代码&#xff0…

作者头像 李华
网站建设 2026/5/30 18:59:33

5款最佳付费墙绕过工具终极指南:轻松解锁付费内容

你是否遇到过这样的情况&#xff1a;想要阅读一篇重要的新闻报道或学术文章&#xff0c;却被付费墙挡住了去路&#xff1f;&#x1f62b; 别担心&#xff0c;今天我将为你介绍5款简单易用的付费内容访问工具&#xff0c;让你快速解锁各类付费内容&#xff0c;提升信息获取效率。…

作者头像 李华
网站建设 2026/5/29 19:02:06

Livewire Laravel无缝整合PHP全栈开发

Livewire Laravel无缝整合PHP全栈开发 在当今Web应用日益复杂的背景下&#xff0c;开发者常常面临一个两难选择&#xff1a;是坚持使用熟悉的服务器端渲染&#xff08;SSR&#xff09;技术快速交付功能&#xff0c;还是转向现代前端框架构建流畅的单页应用&#xff1f;传统PHP开…

作者头像 李华
网站建设 2026/5/30 18:59:33

Seurat-wrappers版本兼容性问题的快速解决指南

Seurat-wrappers版本兼容性问题的快速解决指南 【免费下载链接】seurat-wrappers Community-provided extensions to Seurat 项目地址: https://gitcode.com/gh_mirrors/se/seurat-wrappers 在单细胞分析领域&#xff0c;生物信息学研究人员经常面临版本兼容性挑战。本文…

作者头像 李华