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

C语言学习笔记 Day11(指针--中2)

Day11 内容梳理:

目录

Chapter 7  指针

7.6 指针 & 函数

(1)形参改变实参的值

(2)字符数组作为函数参数

1)合并字符串

2)删掉字符串中空格

(3)指针作为函数返回值


Chapter 7  指针

7.6 指针 & 函数

(1)形参改变实参的值

前文提到形参无法改变实参,但是通过使用指针就可以改变。

因为在除了main()以外的函数内部发生的是值传递,函数运行完成后,其内存就被程序清理掉了。而指针操作能成功交换是因为发生了地址传递。

下图的swap01()是没用指针所以形参无法改变实参的情况

main()里的变量a、b是实参,有对应的值。swap01()中的变量a、b是形参,只有数据类型。把变量从main()传入swap01(),能传入,但是swap01()对变量的改动无法传出。

如果把打印语句放到swap01()内部,而不是main()内部,能看到swap01()里确实发生了改动,但是无法传回main()函数。

下图的swap02()用了指针,所以形参能改变实参:

(2)字符数组作为函数参数

1)合并字符串

用while分别读取string,再利用指针赋值:

2)删掉字符串中空格

方法1:创个数组,暂存删掉空格后的字符串,再用while循环把内容存回去

方法2(比较建议):双指针,一个指针遍历,另一个指针存值

如果不在while结束后把填值指针指向的值改成终止符0,就会出现下图所示的问题:

(3)指针作为函数返回值

函数分两类,查找字符,以及查找字符串。

①查特定字符的位置:

由于这个例子中返回的char*是str[i]的地址,相当于返回以该地址为首的字符数组,所以打印时会显示从该位置往后的字符数组。

在hello world里找’m’则会显示没找到,代买能处理“找到”和“没找到”两种情况:

②查字符串的位置:

引入三个指针,p指针指向目标字符串的首元素,两个指针(fsrc & trav)指向字符数组。

trav指针用于遍历,如果遇到trav和p相同的情况,就用fsrc记录此时的字符数组地址,然后遍历检查p和trav所指向的内容是否一直相同。如果p能遍历到终止符0,就说明字符数组包含目标字符串,返回fsrc;如果p没能遍历到0,则说明没匹配上,此时需要把p初始化为目标字符串的首元素、把trav初始化为fsrc、

http://www.lryc.cn/news/420327.html

相关文章:

  • Golang 并发编程
  • 【数据结构详解】——选择排序(动图详解)
  • 杂项命令(笔记)
  • 代码随想录算法训练营Day38||完全背包问题、leetcode 518. 零钱兑换 II 、 377. 组合总和 Ⅳ 、70. 爬楼梯 (进阶)
  • 超越链端:Web3的无边界技术革命
  • 127. Go反射基本原理
  • 提高PDF电子书的分辨率
  • Spring Cloud全解析:注册中心之zookeeper注册中心
  • 解决戴尔台式电脑休眠后无法唤醒问题
  • MySQL运维-分库分表
  • AGX orin硬件设计
  • AI大模型开发——2.深度学习基础(1)
  • go语言day22 gin-vue-admin全栈项目的依赖安装
  • PHP之docker学习笔记
  • 基于树莓派4B与STM32的UART串口通信实验(代码开源)
  • 【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
  • IIC协议
  • 如何在linux系统上部署nginx
  • 香港网站服务器抵御恶意攻击的一些措施
  • 实战:docker部署filesite.io完美解决家庭相册需求-2024.8.10(测试成功)
  • 美团到店面经
  • 【CSS入门】第五课 - font字体
  • STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led-寄存器编程
  • 【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树
  • 网页上预览Excel文件
  • Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
  • springboot mybatis plus 固定查询条件及可选查询条件的组合查询,使用QueryWrapper.and()来解决。
  • 使用ollama取代openai的api进行graphRAG失败记录
  • MyBatis 配置与测试方式
  • C#实现代理服务器