函数指针、指针函数与结构体的基础知识与应用
一、指针函数1.概念本质是指针返回值是指针2.定义格式数据类型 *函数名(参数列表){函数体return 地址}3.应用实例#includestdio.h #includestdlib.h #includestring.h char *fun() { // char p[10] hello; //开辟在栈区函数运行完结束不一定存的是hello // char *p hello; //存在常量区hello不能修改 char *p (char *)malloc(sizeof(char)*10); //开辟在堆区未释放可读可修改 strcpy(p,hello); return p; } int main(int argc, char const *argv[]) { char *p fun(); printf(%s\n,p); strcpy(p,word); printf(%s\n,p); free(p); p NULL; return 0; }注意区分值传递和地址传递需要看针对于那个变量。如果传参传变量本身对于该变量来说就是值传递如果传参传变量的地址对于变量来说就是地址传递。二、函数指针1.概念本质是指针指向的是函数。2.格式数据类型 (*指针名) (参数列表)数据类型需要和指向函数的数据类型保持一致参数列表需要和指向函数的参数列表保持一支3.基本用法//////////1.定义函数指针并赋值/////////////////// #include stdio.h int sum(int a, int b) { return a b; } int sub(int a, int b) { return a - b; } int main(int argc, char const *argv[]) { int (*p[2])(int, int) {sum, sub}; printf(%d\n, sum(1,2)); printf(%d\n, p[0](5,2)); printf(%d\n, p[1](5,2)); return 0; } /////////////2.函数传参////////////////#includestdio.h int add(int a,int b) { return ab; } int sub(int a,int b) { return a-b; } void test(int (*p)(int,int)) { printf(%d\n,p(2,3)); } int main(int argc, char const *argv[]) { test(add);//5 test(sub);//-1 return 0; }4.函数指针数组1.概念本质数组存放的是指针2.格式数据类型 (*数组名[元素个数])(形参列表);数据类型需要和指针指向的函数类型保持一致参数列表需要和指针指向的参数列表保持一致3.赋值int (*p[2])(int, int) {函数名1, 函数名2};#includestdio.h int add(int a,int b) { return ab; } int sub(int a,int b) { return a-b; } int main(int argc, char const *argv[]) { int (*arr[2])(int,int){add,sub}; //arr[0] add;arr[1]sub; printf(%d\n,arr[0](2,3));//5 return 0; }三、结构体1.概念结构体是用户自定义的数据类型在结构体中可以包含若干个不同数据类型和不同意义的数据项当然也可以相同从而使这些数据相组合起来反应某一个对象的信息。2.格式struct 结构体类型名{数据类型 成员变量;数据类型 成员变量;数据类型 成员变量;.......};struct student { int id; float score; char name[32]; };3.结构体变量3.1 概念结构体类型的变量3.2 格式struct 结构体类型名 变量名;struct student stu;3.3 定义结构体变量1先定义结构体类型再单独定义结构体变量例如#includestdio.h struct student { int id; float score; char name[32]; }; int main(int argc, char const *argv[]) { struct student stu1; return 0; }2定义结构体类型的同时定义结构体变量例如struct student { int id; float score; char name[32]; }stu;也可以缺省结构体类型名定义结构体变量但不常用struct { int id; float score; char name[32]; }stu;3.4结构体变量赋值1定义结构体变量的同时通过{}整体赋值struct student stu1 {1,77,zhangsan};2定义结构体变量的同时用点等法赋值struct student stu2 { .id 2, .score 90.1, };3先定义结构体变量后对成员变量单独赋值truct student stu3; stu3.id 3; stu3.score 97.9; strcpy(stu3.name,lisi);3.5 访问成员变量格式结构体变量名.成员变量名#include stdio.h #include string.h struct student { int id; float score; char name[32]; }stu; int main(int argc, char const *argv[]) { struct student stu1; scanf(%d %f %s,stu1.id,stu1.score,stu1.name); printf(%d %.2f %s\n,stu1.id,stu1.score,stu1.name); return 0; }四、结构体数组1.概念结构体类型的数组2.定义格式struct 结构体类型名 数组名[元素个数];1先定义结构体类型再单独定义结构体数组#includestdio.h struct student { int id; int class; char name[32]; }; int main(int argc, char const *argv[]) { struct student stu1[3]; return 0; }2定义结构体类型的时候同时定义结构体数组struct student { int id; int class; char name[32]; }stu[3];3.结构体数组赋值1定义结构体数组的同时赋值struct student stu1[3]{ {1,98.5,zhangsan}, {2,67.8,lisi}, {3,78.5,wangwu} };3先定义结构体数组在对数组的每一个元素分别赋值struct student st[3]; //给数组的第一个元素赋值 st[0].id 1; st[0].score 90.6; strcpy(st[0].name,haha);4.结构体的输入与输出下标做为循环变量遍历输入输出#include stdio.h #include string.h struct student { int id; float score; char name[32]; } ; int main(int argc, char const *argv[]) { struct student stu[3]; for (int i 0; i 3; i) scanf(%d %f %s,stu[i].id,stu[i].score,stu[i].name); for (int i 0; i 3; i) printf(%d %.2f %s\n,stu[i].id,stu[i].score,stu[i].name); return 0; }五、结构体指针结构体类型的指针1.定义、赋值struct 结构体类型名 *指针名#includestdio.h #includestdlib.h struct student { int id; float score; char name[32]; }; int main(int argc, char const *argv[]) { struct student stu; struct student *p stu; return 0; }2.指针访问成员变量指针名-成员变量名struct student stu; struct student *p stu; p-id 1; p-score 98.5;3.大小本质是指针32位操作系统4字节64位操作系统8字节

相关新闻

嵌入式AI部署---基于RK3588运行yolov5(2)

嵌入式AI部署---基于RK3588运行yolov5(2)

前言:在上篇博客中撰写了关于yolov5在RK3588上运行的流程, 在学习的过程中发现后处理很难,我一直不理解输出结果是如何存储的,它比较抽象,对于我来讲很难理解,经过一段时间的学习,有了一个比较好…

2026/7/22 6:51:04 阅读更多 →
Netflix-4K-DDplus字幕优化技巧:如何调整字幕样式和关闭imsc字幕

Netflix-4K-DDplus字幕优化技巧:如何调整字幕样式和关闭imsc字幕

Netflix-4K-DDplus字幕优化技巧:如何调整字幕样式和关闭imsc字幕 【免费下载链接】netflix-4K-DDplus MicrosoftEdge(Chromium core) extension to play Netflix in 4K(Restricted)and DDplus audio 项目地址: https://gitcode.com/gh_mirr…

2026/7/23 17:32:39 阅读更多 →
Netflix-4K-DDplus开发者深度解析:如何绕过Netflix播放限制的技术原理

Netflix-4K-DDplus开发者深度解析:如何绕过Netflix播放限制的技术原理

Netflix-4K-DDplus开发者深度解析:如何绕过Netflix播放限制的技术原理 【免费下载链接】netflix-4K-DDplus MicrosoftEdge(Chromium core) extension to play Netflix in 4K(Restricted)and DDplus audio 项目地址: https://gitcode.com/gh…

2026/7/24 7:23:57 阅读更多 →

最新新闻

靠谱的斗拱安装机构

靠谱的斗拱安装机构

如果你正在寻找靠谱的斗拱安装机构,那么选择时需要考虑几个关键因素:专业背景、服务质量、以及是否能提供一体化解决方案。基于这些标准,这里推荐几家在行业内享有良好声誉的企业。推荐一:邯郸市骏宸新材料科技有限公司核心优势&a…

2026/7/24 12:19:14 阅读更多 →
Kimi K3 深度测评:长文本之外的真实力

Kimi K3 深度测评:长文本之外的真实力

目录 一、前言:热度之下,回归实测 Kimi K3 基础规格速览 二、测评方案:测试维度与环境说明 测试环境 四大测试维度 三、实测第一部分:长上下文 & 多轮对话能力 测试案例 实测数据 四、实测第二部分:逻辑推…

2026/7/24 12:19:14 阅读更多 →
OpenClaw集成国产大模型API实战指南

OpenClaw集成国产大模型API实战指南

1. 项目背景与需求解析OpenClaw作为一款新兴的开源AI工具链,其功能实现高度依赖底层大模型API的支持。对于国内开发者而言,在部署过程中面临的首要问题就是API服务的选择——这不仅关系到功能实现的完整性,更直接影响开发效率和使用体验。1.1…

2026/7/24 12:19:14 阅读更多 →
AI数学基础:线性代数与概率论在深度学习中的核心应用

AI数学基础:线性代数与概率论在深度学习中的核心应用

1. 项目概述这个学习笔记项目源于DataWhale社区组织的二月组队学习活动,聚焦人工智能领域的数学基础。作为开篇任务,Task01主要帮助学员建立必要的数学知识框架,为后续的机器学习、深度学习等内容打下坚实基础。在AI领域摸爬滚打这些年&#…

2026/7/24 12:19:14 阅读更多 →
WSL2部署OpenClaw AI:闲置Windows笔记本变身高性能AI终端

WSL2部署OpenClaw AI:闲置Windows笔记本变身高性能AI终端

1. 项目背景与核心价值 2026年实测的闲置Windows笔记本部署OpenClaw AI员工方案,本质上是通过WSL2技术栈在Windows环境下构建完整的Linux兼容层,实现AI工作负载的高效运行。这个方案特别适合手头有老旧Windows设备(特别是i5-8代以上CPU16GB内…

2026/7/24 12:19:14 阅读更多 →
程序员转型AI大模型:技术栈与实战指南

程序员转型AI大模型:技术栈与实战指南

1. 为什么程序员转AI大模型正当时去年我在团队内部做技术分享时,曾用过一个形象的比喻:传统编程就像手工打造自行车,而大模型开发则是开上了智能汽车产线。这个转变背后是三个关键趋势的叠加:首先看行业需求,国内头部招…

2026/7/24 12:18:14 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻