当前位置: 首页 > 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.jsqmd.com/news/65805/

相关文章:

  • ZenMux 企业级大模型聚合平台,免费试用模型 Gemini 3 Pro
  • 102302139 尚子骐 数据采集与融合作业4
  • 代码随想录32_动态规划基础
  • vsc_backgroud_css小记
  • 3、缺陷管理
  • SGLang 的 DP Attention 模式浅析 - -银光
  • 每日反思(2025年12月7号)
  • 记我第一次代码审计 (bluecmsv1.6的sql注入复现)
  • 每日3题 2(暂鸽)
  • K8S的Service
  • 在MacOS中运行k3s
  • 2025 最新成都/西南地区品牌策划服务商 / 公司 TOP5 评测!实战案例 + 系统服务权威榜单发布,助力企业品牌资产与业绩双增长
  • 第48天(中等题 数据结构)
  • 2025杭州有哪些靠谱的舞蹈培训机构:拱墅区舞蹈培训机构推荐
  • 2025包装机械厂家/粉末吨袋包装机厂家综合实力榜单
  • 12.7笔记
  • 为什么使用 telnet 命令可以探测目标主机的某个端口是否开放?
  • 2025成都/西南地区营销策划服务商 TOP5 评测!实战案例驱动 + 系统服务权威榜单发布,赋能品牌资产与业绩双增长
  • PDFsharp:强大的 .NET 跨平台 PDF 处理库
  • 2025 成都/西南地区品牌定位服务商 TOP5 评测!实战案例驱动+系统化战略权威榜单发布,助力企业实现品牌资产与业绩双增长
  • 2025 最新成都/西南地区品牌策划/品牌设计/包装设计/营销策划/品牌定位服务商 TOP5 评测!实战案例驱动 + 全案能力实证权威榜单发布,赋能品牌资产与销量双增长
  • 2025 最新成都/西南地区品牌设计服务商 / 公司 TOP5 评测!战略赋能 + 案例实证权威榜单发布,创意驱动重构品牌价值生态
  • 2025辽宁省高考志愿填报服务商 / 机构 TOP5 评测!专业规划 + 多元升学权威榜单发布,助力考生精准迈入理想高校
  • 2025辽宁省高一选科服务机构 TOP5 评测!专业规划 + 多元赋能权威榜单发布,科学指导构建升学优势生态
  • 2025辽宁省港澳升学服务机构TOP5评测!专业规划+多元路径权威榜单发布,助力学子圆梦理想学府
  • 2025辽宁省特长生升学/中高考升学机构TOP5评测!专业团队+多元路径权威榜单发布,规划赋能学子升学新未来
  • 2025辽宁省高一选科/高考志愿填报/特长生升学/港澳升学/综合评价升学机构TOP5评测!全链路规划权威榜单发布,助力考生精准规划升学路径
  • 二项式定理
  • 打家劫舍
  • 本人对于cookie和session的理解