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

C语言之写一个修改数组内容的函数

问题代码:

在这里插入图片描述
函数ltrim是为了消除buf字符数组中左边空格,
memmove函数介绍
在这里插入图片描述
如果对c语言指针运用非常熟练的人,结合函数功能就会发现这个代码非常的傻逼,你会发现为什么需要返回,buf不用接收返回值,执行这个函数后buf中的内容就已经被改变。

正确的应该这样写:

在这里插入图片描述

收获与感悟:

1、我感觉在代码中,变量名与其所指代的值是key和value的关系,在需要value做运算与条件判断时,编译器或解释器就会进行根据key查找到value进行替换
例如:

int a=10;
char *str="你好世界\0"

这里我们可以看做两个c++中的pair结构,

[{key:"a",value:10},{key:"str",value:"字符串首地址”}
]

在这个的基础上我们理解指针做函数参数时,

func(str)

我们将key值为str的pair结构传入函数,在需要对value其进行操作时,如:

*str
*(str+1)

编译器或解释器将替换成value

*(0x12345)
*(0x1235+1)

ps:以上纯是自己的胡乱理解。

2、在第一张图中你们可以发现
buf=ltrim(buf),提示 “表达式必须是可修改的左值”,
1、可以浅显的理解为buf是 char *const 类型,明确buf的地址不能修改,但是这只能作为一个”偏方“记忆不能一个数组直接赋值给另一个数组,将一个指针赋给数组标识符,但这个将buf理解为char *const也是错误的。

char buf2[256]={'0'};
buf=buf2;//同样不被允许会触发报警

2、但其实我们需要明确buf指代的是数组,而数组是数组,指针是指针,数组可以被编译器转换为指针。
例如:

void ltrim(char str[]);

上面的函数应该会被预编译器替换为

void ltrim(char *str)

而指针不能转换为数组,所以在第一张图中
就算buf可以被修改也是不允许的这样写的。

以上纯属个人理解,大概都是问题,不要盲目相信


http://www.mrgr.cn/news/64284.html

相关文章:

  • c++仿函数--通俗易懂
  • EtherCAT转ModbusTCP相关技术
  • 小夜灯语音识别芯片,灯具声控方案,NRK3301
  • LeetCode994. 腐烂的橘子(2024秋季每日一题 54)
  • 在Unity游戏开发在面试时会面试哪些内容?
  • 如何使用VBA识别Excel中的“单元格中的图片”(2/2)
  • 优化外贸管理 解锁全球业务流畅双效
  • 原子操作(atomic operation)
  • Kotlin协程suspend的理解
  • 【JavaEE初阶】网络原理(4)
  • Linux云计算 |【第五阶段】CLOUD-DAY10
  • 国产操作系统卖疯了!最营收7.84亿,最低1.5亿
  • 每日OJ题_牛客_排序子序列_模拟_C++_Java
  • 2022美亚杯复现(部分)
  • 【系统架构设计师】2024年上半年真题论文: 论模型驱动架构设计方法及其应用(包括解题思路和素材)
  • 034_Structural_Transient_In_Matlab结构动力学问题求解
  • 学习GCC
  • 速通一些常见的神经网络
  • 高德地图如何标注店铺名称和位置信息?
  • vue中的nextTick() - 2024最新版前端秋招面试短期突击面试题【100道】
  • 用Python语言,利用 tk包,实现选择2个目录,进行COPY功能
  • ssm037物流管理系统设计与实现+jsp(论文+源码)_kaic
  • 信号量本质 信号量实验(控制车辆运行,优先级反转)互斥量
  • Java基于SpringBoot+Vue框架的房屋租赁管理系统(附源码,文档)
  • Nuxt.js 应用中的 nitro:config 事件钩子详解
  • (JVM)全面深入Java GC!!带你完全了解 Java 的‘ 灵魂 ‘ GC垃圾回收机制!!