day03 指针应用和文件操作

news/2025/12/8 0:34:11/文章来源:https://www.cnblogs.com/WIRO/p/19319225

C语言指针的详解与应用

image-20251207220301446

image-20251207220342286

image-20251207220914448

image-20251207221029122

指针存放的是首地址,指针是变量

image-20251207221957007

image-20251207222010710

image-20251207222050141

image-20251207222607913

image-20251207222618954

关于指针 p++ 的操作

image-20251207222903249

#include <stdio.h>
int main()
{char a = 0x66;char *p;  // 星号通常和变量名放在一起,防止歧义p = &a;   // 把a的地址给pprintf("%x\n",a);   // a的值printf("%x\n",p);   // a的地址printf("%x\n",*p);  // 通过a的地址访问数据p++;printf("%x\n",p);  // 加上1字节,因为是char占1字节return 0;
}

image-20251207223055230

#include <stdio.h>
int main()
{char a[] = {0x33,0x34,0x35};// 正常访问printf("a[0] = %x\n",a[0]);printf("a[1] = %x\n",a[1]);printf("a[2] = %x\n",a[2]);// 使用指针访问数组printf("*a = %x\n",*a);printf("*(a + 1) = %x\n",*(a + 1));printf("*(a + 2) = %x\n",*(a + 2));return 0;}

image-20251207223906650

#include <stdio.h>
#include <stdlib.h>
int main()
{// char a[] = {0x33,0x34,0x35};// 动态申请内存,效果一样int *a;a = malloc(3*4);*a = 0x33;*(a + 1) = 0x34;*(a + 2) = 0x35;// 正常访问printf("a[0] = %x\n",a[0]);printf("a[1] = %x\n",a[1]);printf("a[2] = %x\n",a[2]);// 使用指针访问数组printf("*a = %x\n",*a);printf("*(a + 1) = %x\n",*(a + 1));printf("*(a + 2) = %x\n",*(a + 2));return 0;}

image-20251207224252347

image-20251207224424873

image-20251207224811062

#include <stdio.h>void fun(int param)
{printf("%x\n",param);
}int main()
{int a = 0x66;fun(a); // 值传递本质是复制,两份数据存储在不同的位置return 0;
}

image-20251207225243541

#include <stdio.h>int FindMax(const int *array,int Count)  // const 常量、只读
{int i;int max = array[0];for ( i = 0; i < Count; i++){if (array[i] > max){max = array[i];}    }return max; 
}int main()
{int a[] = {1,2,30,5,4,3};int Max;Max = FindMax(a,6);printf("Max = %d\n",Max);return 0;
}

image-20251207230018898

  • 值传递:安全,但费事(需要复制数据)
  • 地址传递:省事,但不安全(数据可能被更改)
#include <stdio.h>// 利用指针实现多返回值
void FindMaxAndCount(int *max,int *count,const int *array,int length)
{int i;*max = array[0];*count = 1;for ( i = 0; i < length; i++){if (array[i] > *max){*max = array[i];*count = 1;}else if (array[i] == *max){(*count)++;}}}int main(void)
{int a[] = {21,2,30,5,4,30};int Max;int Count;FindMaxAndCount(&Max,&Count,a,6);printf("Max = %d\n",Max);printf("Count = %d\n",Count);return 0;
}

image-20251207232027662

C语言 只支持1个返回值,但利用指针可以实现任意多返回值

#include <stdio.h>
#include <string.h>int main(void)
{char str1[20];char str2[] = "HelloWorld";strcpy(str1,str2); // 会把str2的值复制到str1中printf(str1);printf("\n");      // 换行printf(str2);return 0;
}

image-20251207232914165

#include <stdio.h>// 返回值指针的类型演示
/*************************/
int Time[] = {23,59,55};int *GetTime(void)
{return Time;
}
/************************/int main(void)
{int *pt;pt = GetTime();printf("pt[0] = %d\n",pt[0]);printf("pt[1] = %d\n",pt[1]);printf("pt[2] = %d\n",pt[2]);return 0;
}

image-20251207233448825

文件操作

#include <stdio.h>int main(void)
{FILE *f = fopen("H:\\test.txt","w"); // 创建test.txt文件,w 如果没有就创建fputc('A',f);  // 向文件f 写入字符Afputs("HelloWorld",f);  // 向文件f 写入字符串 HelloWorldfclose(f);}

image-20251207234239982

#include <stdio.h>int main(void)
{char a;char s[10];FILE *f = fopen("H:\\test.txt","r"); //只读方式打开文件test.txta = fgetc(f); // 读取文件f 一个字符fgets(s,9,f); // 读取文件f 九个字符 写入 s变量fputs("HelloWorld",f);  // 向文件f 写入字符串 HelloWorldprintf("%c\n",a);printf(s);fclose(f);}

image-20251207234821715

51单片机相关

image-20251207235216566

#include <REGX52.H>
#include "LCD1602.h"void main()
{unsigned char *p;LCD_Init();LCD_ShowString(1,1,"HelloWorld!");p = (unsigned char *)0xF1;LCD_ShowHexNum(2,1,*p,2);LCD_ShowHexNum(2,3,*(p+1),2);LCD_ShowHexNum(2,5,*(p+2),2);LCD_ShowHexNum(2,7,*(p+3),2);LCD_ShowHexNum(2,9,*(p+4),2);LCD_ShowHexNum(2,11,*(p+5),2);LCD_ShowHexNum(2,13,*(p+6),2);while (1){/* code */}}

image-20251208000145518

image-20251208000037214

模拟通信模块

#include <stdio.h>/***************************/unsigned char AirData[20];void SentData(const unsigned char *data,unsigned char count)  // 利用指针完成地址传输,可以直接修改数据
{unsigned char i;for ( i = 0; i < count; i++){AirData[i] = data[i];}
}void ReceiveData(unsigned char *data,unsigned char count)
{unsigned char i;for ( i = 0; i < count; i++){data[i] = AirData[i];}}/***************************/int  main()
{unsigned char i;// 发送数据/*************************/unsigned char DataSend[] = {0x12,0x34,0x56,0x78};SentData(DataSend,4);printf("\nAirData = ");for ( i = 0; i < 20; i++){printf("%x ",AirData[i]);}/*************************/// 接收数据/*************************/unsigned char DataReceive[4];ReceiveData(DataReceive,4);printf("\nReceiveData = ");for ( i = 0; i < 20; i++){printf("%x ",AirData[i]);}/*************************/return 0;
}

image-20251208001908642

模拟通信模块,利用指针传输数据

#include <stdio.h>/***************************/unsigned char AirData[20];void SentData(const unsigned char *data,unsigned char count)
{unsigned char i;for ( i = 0; i < count; i++){AirData[i] = data[i];}
}void ReceiveData(unsigned char *data,unsigned char count)
{unsigned char i;for ( i = 0; i < count; i++){data[i] = AirData[i];}}/***************************/int  main()
{unsigned char i;float num = 12.345f;unsigned char *p;p = (unsigned char *)&num; // 对num取地址// 发送数据/*************************/unsigned char DataSend[] = {0x12,0x34,0x56,0x78};SentData(p,4);             // 输入指针p printf("\nAirData = ");for ( i = 0; i < 20; i++){printf("%x ",AirData[i]);}/*************************/// 接收数据/*************************/unsigned char DataReceive[4];float *fp;ReceiveData(DataReceive,4);fp = (float *)DataReceive;printf("\nnum = %f",num);/*************************/return 0;
}

image-20251208002743827

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/991951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZenMux 企业级大模型聚合平台,免费试用模型 Gemini 3 Pro

ZenMux 是全球首个支持保险赔付机制的企业级大模型聚合平台。 ZenMux 聚合了全球领先的闭源和开源大语言模型,在一个统一的平台上为开发者提供便捷的模型调用服务。 ZenMux 提供统一的 API 接口访问 OpenAI、Anthropi…

102302139 尚子骐 数据采集与融合作业4

作业一1. 完整代码及运行结果点击查看代码 from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui…

代码随想录32_动态规划基础

代码随想录32_动态规划基础理论基础 Dynamic Programming,当前状态由上一状态推导而来。 FIB 斐波那契 1.初始化数组的时候需要分配数组大小; 2.如果没有分配,使用push_back是安全的; 题解 class Solution { public…

vsc_backgroud_css小记

突然想给vsc背景加张图片 下载了 Custom CSS and JS Loader的插件 这个插件专门用来加载自定义的css和js文件 然后用ai写了个css文件 /* VS Code背景图:左下角局部显示 + 低存在感 */ body {/* https://img2024.cnblo…

3、缺陷管理

3.1缺陷介绍 1、缺陷的定义 软件在使用过程中存在的任何问题都叫软件的缺陷,简称bug2、缺陷的判定标准软件为实现需求(规格)说明书中明确要求的功能——少功能 软件出现了需求(规格)说明书中指明不应该出现的错误…

SGLang 的 DP Attention 模式浅析 - -银光

SGLang 的 DP Attention 模式浅析注:本文已于2025.11.30 发表于知乎和公众号 1. 简介 前序的三篇笔记,先系统总结各种SGLang 分布式集群模式,然后对TP 集群的完整执行流程做解析,再重点介绍 PP 集群的任务调度和分…

记我第一次代码审计 (bluecmsv1.6的sql注入复现)

此次漏洞复现搭建环境:php5.4.6+phpstudy+windows 1.首先获取bluecms源码并导入到phpstorm方便后续的代码审计,定位漏洞代码 在phpstorm可以使用快捷键shift+ctrl+f使用全局搜索功能并且支持正则匹配,通过这段查询语…

每日3题 2(暂鸽)

事情实在太多了先鸽着,在学莫比乌斯反演

K8S的Service

原文博客:https://nosae.topapiVersion: discovery.k8s.io/v1 kind: EndpointSlice metadata: name: my-service-1 # EndpointSlice命令的最佳实践是以svc的名称作为前缀 labels: # 这个label的值必须是svc的名称,将…

在MacOS中运行k3s

原文博客:https://nosae.topk3shttps://github.com/caicloud/kube-ladder安装ubuntu家的multipass虚拟机 brew install multipass(镜像路径在/var/root/Library/Caches/multipassd/qemu/vault/images下) 创建一个虚拟…

2025 最新成都/西南地区品牌策划服务商 / 公司 TOP5 评测!实战案例 + 系统服务权威榜单发布,助力企业品牌资产与业绩双增长

随着市场竞争的日益激烈,专业的品牌策划已成为企业打造核心竞争力、实现可持续发展的关键。本榜单基于技术实力、行业经验、服务案例、客户口碑四大维度,结合行业协会数据及市场反馈,权威解析2025年五大品牌策划公司…

第48天(中等题 数据结构)

打卡第四十八天 2道中等题题目:思路:前缀和+贪心,一边遍历数组计算前缀和,一边维护前缀和的最小值(相当于股票最低价格),用当前的前缀和(卖出价格)减去前缀和的最小值(买入价格),就得到了以当前元素结尾的…

2025杭州有哪些靠谱的舞蹈培训机构:拱墅区舞蹈培训机构推荐

2025杭州有哪些靠谱的舞蹈培训机构:拱墅区舞蹈培训机构推荐!选择舞蹈培训机构时,建议从以下几个维度进行考量:教学体系:关注课程设置的系统性和科学性,是否形成循序渐进的教学路径师资队伍:了解教师的专业背景、持…

2025包装机械厂家/粉末吨袋包装机厂家综合实力榜单

2025包装机械厂家/粉末吨袋包装机厂家综合实力榜单。粉末吨袋包装机作为大宗粉末物料包装的核心设备,凭借高效、精准、环保的特性,成为化工、建材、粮食等行业的关键装备。其核心优势在于能针对性解决粉末易飞扬、流…

为什么使用 telnet 命令可以探测目标主机的某个端口是否开放?

为什么使用 telnet 命令可以探测目标主机的某个端口是否开放?Telnet 属于应用层协议,传输层采用 TCP,服务器默认监听 23 端口,通过 telnet 协议可以实现远程登录设备,并以命令方式进行交互。 使用 Telnet 传输数据…

2025成都/西南地区营销策划服务商 TOP5 评测!实战案例驱动 + 系统服务权威榜单发布,赋能品牌资产与业绩双增长

随着市场竞争的日益激烈,专业的营销策划已成为企业打造品牌、提升销量的关键。本榜单基于技术实力、行业适配性、服务效能、实战案例以及行业贡献五大维度,结合众多企业的实际反馈与行业数据,权威解析2025年五大营销…

PDFsharp:强大的 .NET 跨平台 PDF 处理库

PDFsharp:强大的 .NET 跨平台 PDF 处理库Posted on 2025-12-08 00:00 lzhdim 阅读(0) 评论(0) 收藏 举报一、简介 PDFsharp 是一个功能强大且免费开源的 .NET 库,专为创建、修改和处理 PDF 文档而设计。它支持多…

2025 成都/西南地区品牌定位服务商 TOP5 评测!实战案例驱动+系统化战略权威榜单发布,助力企业实现品牌资产与业绩双增长

随着市场竞争加剧,精准的品牌定位成为企业突破同质化困境、赢得消费者心智的关键。本榜单基于战略系统性、行业适配性、实战效果、资质荣誉四大维度,结合西南地区品牌服务市场深度调研,权威解析2025年五大品牌定位服…

2025 最新成都/西南地区品牌策划/品牌设计/包装设计/营销策划/品牌定位服务商 TOP5 评测!实战案例驱动 + 全案能力实证权威榜单发布,赋能品牌资产与销量双增长

随着市场竞争加剧,专业的品牌策划、设计与营销服务成为企业提升核心竞争力的关键。本榜单基于战略规划深度、创意设计能力、实战案例效果、行业资源整合四大维度,结合企业服务口碑与行业影响力,权威解析2025年五大品…