当前位置: 首页 > news >正文

day03 指针应用和文件操作

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.gsyq.cn/news/76331.html

相关文章:

  • ZenMux 企业级大模型聚合平台,免费试用模型 Gemini 3 Pro
  • 102302139 尚子骐 数据采集与融合作业4
  • vsc_backgroud_css小记
  • 每日3题 2(暂鸽)
  • 为什么使用 telnet 命令可以探测目标主机的某个端口是否开放?
  • 2025成都/西南地区营销策划服务商 TOP5 评测!实战案例驱动 + 系统服务权威榜单发布,赋能品牌资产与业绩双增长
  • # 2025ISCTF
  • SGLang 的 TP 模式浅析 - -银光
  • 2025年下半年上海CE认证服务商综合评测与选择指南
  • 2025年12月海南财税代理,海南税务合规财税,海口财税公司品牌推荐榜,彰显专业财税服务实力
  • solid设计原则
  • 2025.12.7总结
  • OI 带给了我什么
  • 2025最新宁德锂电池组装服务商/厂家TOP5评测!技术创新+定制方案权威榜单发布,赋能新能源动力生态升级
  • HRSword_v5.0.1.1 sysdiag.sys
  • 12.5 MyBatis
  • 新同学培训有感
  • 2025最新储能电池组装厂家TOP5评测!技术创新+定制方案权威榜单发布,赋能新能源产业高质量发展
  • DFAT—Dual Focus-Attention Transformer for Robust Point Cloud Registration
  • 某中心语音AI前沿技术在SLT会议的研究突破
  • 2025最新电动车锂电池品牌/厂家TOP5评测!技术创新+安全效能权威榜单发布,赋能新能源出行生态升级
  • 12 ORM 处理表关联
  • 第四周作业
  • Homework
  • 案例库--工抵协议系承包人主张优先受偿权的合法方式
  • 排列组合
  • 2025 最新西双版纳旅游服务商TOP5推荐!地接社/旅行社五大优质品牌,资源实力 + 服务口碑权威榜单发布,专业赋能构筑美好旅行体验
  • 深入理解 RocketMQ 核心机制
  • 2025最新西双版纳旅行社TOP5推荐!资源整合+服务升级权威榜单发布,品质赋能重构雨林旅游体验
  • 豆包手机助手遭围剿,网友玩梗“微信OS”若成真,会长啥样?