news 2026/7/30 16:56:43

结构体指针做为输入型参数和返回参数为结构体指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
结构体指针做为输入型参数和返回参数为结构体指针

结构体指针做为输入型参数和返回参数为结构体指针

  • 结构体指针运用
    • C的代码其中的原理在代码中有注释
    • 运行结果:

结构体指针运用

这个是测试笔记。

C的代码其中的原理在代码中有注释

#include<stdio.h>typedefstruct// 创建一个结构体{intdisk;intfile;}SCFILE;SCFILE*open(void)// 创建一个函数,返回值是结构体指针{SCFILE*hdl=NULL;// 创建一个结构体指针 初始化的时候需要 赋值 NULL,避免野指针printf("open star 1=================================\n");hdl=(SCFILE*)malloc(sizeof(SCFILE));// 给指针分配指向的地址printf("hdl value %p\n",hdl);// 直接打印 hdl ,表示该指针的指向的地址 ,即该结构体指针存的值printf("*hdl value %d\n",*hdl);// *p 表示的指针进行解引用 由于结构体的存储特性,直接 *hdl 表示结构体中的第一个元素的值printf("&hdl value %p\n",&hdl);// 表示该结构体指针的地址printf("open 2\n");hdl->disk=10;// 给结构体中的元素赋值printf("open 3\n");hdl->file=20;// 给结构体中的元素赋值printf("open 4\n");printf("*hdl value %d\n",*hdl);// 第一个元素的值printf("hdl value %p\n",hdl);// 结构体指针里指向的地址,即该结构体指针存的值printf("&hdl value %p\n",&hdl);// 该结构体指针的地址printf("open end====================================\n");returnhdl;}// 使用二重指针 // 直接传入指针的地址intfffopen(SCFILE**hdl){*hdl=open();// 这里直接把返回的指针(即地址值)赋值给传入的指针的地址,那么就把传入指针指向的地方改变了printf("4\n");if(hdl==NULL){printf("sAPI_fopen err\r\n");return-1;}printf("5\n");printf("hdl->disk %d\n",(*hdl)->disk);printf("hdl->file %d\n",(*hdl)->file);return0;}intfffopen1(SCFILE*hdl){int*aa=NULL;SCFILE*pHd=(SCFILE*)malloc(sizeof(SCFILE));printf("sizeof(pHd) %d\n",sizeof(pHd));// 可以测出,不管什么类型的指针,其大小都是一样的,我的这里是 4字节,和运行的机器位数有关printf("sizeof(aa) %d\n",sizeof(aa));printf("hdl value %p\n",hdl);// hdl 存储的地址值printf("*hdl value %d\n",*hdl);// hdl 第一个元素的值printf("&hdl addr %p\n",&hdl);// hdl 的地址printf("=====================\n");printf("pHd value %p\n",pHd);// phd 存储的值printf("*hdl value %d\n",*pHd);// pHd 第一个元素的值printf("&pHd addr %p\n",&pHd);// pHd 的地址pHd=hdl;// 把 hdl 中存储的地址值赋值给 pHd 即pHd 指向了那个地址printf("4\n");printf("hdl value %p\n",hdl);// hdl 存储的地址值printf("*hdl value %d\n",*hdl);// hdl 第一个元素的值printf("&hdl addr %p\n",&hdl);// hdl 的地址printf("=====================\n");printf("pHd value %p\n",pHd);// phd 存储的值printf("*hdl value %d\n",*pHd);// pHd 第一个元素的值printf("&pHd addr %p\n",&pHd);// pHd 的地址*pHd=*open();// 把open函数返回的赋值给 pHd ,open返回的是结构体指针 加上* 表示解引用 即把两边的解引用出来赋值给新的,因为新的也指向传入的地址//pHd = open(); //如果写成这种,是无法通过输入型参数把值返回的,因为这样表示返回的指针赋值(即另外一个地址)给另外一个指针,传入的就无法改变printf("5\n");printf("hdl value %p\n",hdl);// hdl 存储的地址值printf("*hdl value %d\n",*hdl);// hdl 第一个元素的值printf("&hdl addr %p\n",&hdl);// hdl 的地址printf("=====================\n");printf("pHd value %p\n",pHd);// phd 存储的值printf("*hdl value %d\n",*pHd);// pHd 第一个元素的值printf("&pHd addr %p\n",&pHd);// pHd 的地址if(hdl==NULL){printf("sAPI_fopen err\r\n");return-1;}printf("6\n");printf("hdl->disk %d\n",pHd->disk);// 由于 pHd 和 hdl 指向的地址是同一块,所以打印出的是一样的printf("hdl->file %d\n",pHd->file);printf("hdl->disk %d\n",hdl->disk);printf("hdl->file %d\n",hdl->file);return0;}voidmain(void){#if0SCFILE*hdl=(SCFILE*)malloc(sizeof(SCFILE));printf("11\n");printf("hdl value %p\n",hdl);// hdl 存储的地址值printf("*hdl value %d\n",*hdl);// hdl 第一个元素的值printf("&hdl addr %p\n",&hdl);// hdl 的地址printf("1111\n");if(fffopen(&hdl)==-1){printf("error");}#elseSCFILE*hdl=(SCFILE*)malloc(sizeof(SCFILE));printf("11\n");printf("hdl value %p\n",hdl);// hdl 存储的地址值printf("*hdl value %d\n",*hdl);// hdl 第一个元素的值printf("&hdl addr %p\n",&hdl);// hdl 的地址printf("1111\n");if(fffopen1(hdl)==-1){printf("error");}#endifprintf("OK\n");printf("hdl->disk %d\n",hdl->disk);printf("hdl->file %d\n",hdl->file);}

运行结果:

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

Android系统各个版本发布时间

Android 系统版本SDK版本备注正式版发布时间Android 1535Android 1434Android 1333Android 12L32Android 12 S31Android 11 R302020年9月9日Android 10 Q292019年9月3日Android 9 P282018年8月7日Android 8.1272017年8月22日Android 8.0 O262017年8月22日Android 7.1252016年8月…

作者头像 李华
网站建设 2026/7/30 16:53:26

单片机毕业设计-基于 STM32 的环境监测与风扇自动调控系统设计 基于嵌入式的温烟数据采集与声光报警系统实现(013901)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/7/30 16:53:18

PWM与SPWM核心差异解析:从基础占空比控制到正弦波逆变应用

1. 从“开关”到“正弦”&#xff1a;PWM与SPWM的本质差异 干了这么多年嵌入式硬件和电机控制&#xff0c;PWM&#xff08;脉宽调制&#xff09;和SPWM&#xff08;正弦脉宽调制&#xff09;这两个词几乎天天见。新手工程师&#xff0c;甚至一些有几年经验的同行&#xff0c;有…

作者头像 李华
网站建设 2026/7/30 16:52:21

Python离线安装第三方库:从原理到实战的完整指南

1. 项目概述&#xff1a;为什么我们需要离线安装 在Python开发中&#xff0c; pip install 几乎是每个开发者每天都会敲下的命令。它连接着PyPI这个庞大的软件仓库&#xff0c;让我们能轻松获取全球开发者贡献的数十万个第三方库。然而&#xff0c;这个看似完美的在线生态&am…

作者头像 李华
网站建设 2026/7/30 16:50:40

涡轮增压技术解析:从工作原理到性能提升实战指南

涡轮增压器引擎性能提升&#xff1a;从原理到实战的完整指南 如果你曾经疑惑为什么同排量的发动机&#xff0c;有的车动力强劲如猛虎&#xff0c;有的却温顺如绵羊&#xff0c;答案很可能就藏在那个小小的涡轮增压器里。在环保法规日益严格、燃油价格持续波动的今天&#xff0c…

作者头像 李华
网站建设 2026/7/30 16:48:50

计算机毕业设计之采购系统的设计与实现

摘 要近年来互联网络的迅猛发展和电子终端设备的普及&#xff0c;赋予了各行业充足的发展空间。采购系统相比于传统信息技术&#xff0c;时效性是它最大的特色&#xff0c;已经在电子娱乐、经济等中发挥着举足轻重的作用。2019年疫情的爆发&#xff0c;更是短时间内迅速扩大了…

作者头像 李华