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

大开眼界,原来指针还能这么玩?

在这里插入图片描述

文章目录

    • 第一阶段:基础理解
      • 目标:
      • 内容:
      • 题目:
      • 答案解析:
    • 第二阶段:指针与数组
      • 目标:
      • 内容:
      • 题目:
      • 答案解析:
    • 第三阶段:指针与字符串
      • 目标:
      • 内容:
      • 题目:
      • 答案解析:
    • 第四阶段:指针与函数
      • 目标:
      • 内容:
      • 题目:
      • 答案解析:
    • 第五阶段:复杂指针与多级指针
      • 目标:
      • 内容:
      • 题目:
      • 答案解析:

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

第一阶段:基础理解

目标:

理解指针的基本概念、声明、初始化和基本操作。

内容:

指针的基本概念:指针是存储内存地址的变量。
指针的声明和初始化:例如,int *p; 声明了一个指向整数的指针 p。
指针的解引用:使用 *p 来访问指针 p 所指向的值。
指针的运算:指针加减整数、指针比较等。

题目:

声明一个指向整数的指针,并将其初始化为指向一个整数变量的地址。
通过指针解引用访问并修改该整数变量的值。

答案解析:

int a = 10;  
int *p = &a; // 声明一个指向整数的指针p,并将其初始化为指向变量a的地址
*p = 20; // 通过指针p解引用访问并修改变量a的值为20

第二阶段:指针与数组

目标:

理解指针在数组中的应用,包括数组名作为指针、指针遍历数组等。

内容:

数组名作为指针:在表达式中,数组名会被解释为指向数组首元素的指针。
指针遍历数组:使用指针遍历数组元素,并修改或访问它们的值。

题目:

声明一个整型数组,并使用指针遍历数组并打印每个元素的值。
通过指针修改数组中某个元素的值。

答案解析:

int arr[] = {1, 2, 3, 4, 5};  
int *p = arr; // 数组名arr作为指向首元素的指针  
for (int i = 0; i < 5; i++) {  printf("%d ", *(p + i)); // 使用指针p遍历数组并打印每个元素的值  
}
*(p + 2) = 10; // 通过指针p修改数组中第三个元素(下标为2)的值为10

第三阶段:指针与字符串

目标:

理解指针在字符串中的应用,包括字符串的声明、访问和修改。

内容:

字符串的声明和初始化:使用字符数组或字符指针声明字符串。
指针遍历字符串:使用指针遍历字符串中的每个字符。
字符串的修改:通过指针修改字符串中的字符。

题目:

声明一个字符串,并使用指针遍历字符串并打印每个字符。
通过指针修改字符串中的某个字符。

答案解析:

char str[] = "Hello, World!";  
char *p = str; // 字符串str的首地址赋给指针p  
while (*p != '\0') { // 遍历字符串直到遇到空字符'\0'  printf("%c", *p);  p++;  
}
*(p + 7) = 'C'; // 通过指针p修改字符串中第八个字符(下标为7)为'C'

第四阶段:指针与函数

目标:

理解指针作为函数参数的使用,以及指针在函数返回值中的应用。

内容:

指针作为函数参数:通过指针参数在函数中修改外部变量的值。
指针作为函数返回值:返回一个指向局部变量的指针(注意避免悬垂指针问题)。

题目:

编写一个函数,接收一个整数指针作为参数,并通过该指针修改其指向的整数值。
编写一个函数,返回一个指向静态分配内存的字符串的指针。

答案解析:

#include <stdio.h>  void modifyValue(int *p) {  *p = 20; // 通过指针p修改其指向的整数值为20  
}  int main() {  int a = 10;  modifyValue(&a); // 调用函数并传递变量a的地址  printf("%d\n", a); // 输出修改后的值,应为20  return 0;  
}
#include <stdio.h>  char* getString() {  static char str[] = "Hello, World!"; // 使用静态分配内存,避免悬垂指针问题  return str; // 返回指向静态字符串的指针  
}  int main() {  char *p = getString(); // 调用函数并获取返回的字符串指针  printf("%s\n", p); // 输出字符串,应为"Hello, World!"  return 0;  
}

第五阶段:复杂指针与多级指针

目标:

理解复杂指针类型(如指向指针的指针、指向数组的指针等)以及它们在多级指针中的应用。

内容:

复杂指针类型的声明和初始化。
多级指针的解引用和运算。

题目:

声明一个指向整数的指针的指针,并通过它修改一个整数的值。
声明一个指向整型数组的指针,并使用指针遍历数组并打印每个元素的值。

答案解析:

#include <stdio.h>  void modifyValue(int **pp) {  **pp = 30; // 通过二级指针修改其指向的整数值为30  
}  int main() {  int a = 10;  int *p = &a; // 一级指针p指向变量a  int **pp = &p; // 二级指针pp指向一级指针p  modifyValue(pp); // 调用函数并传递二级指针pp  printf("%d\n", a); // 输出修改后的值,应为30  return 0;  
}
#include <stdio.h>  void printArray(int (*arr)[5]) { // 声明一个指向含有5个整数的数组的指针作为函数参数  for (int i = 0; i < 5; i++) {  printf("%d ", *(arr + i)); // 使用指针遍历数组并打印每个元素的值  }  printf("\n");  
}  int main() {  int arr[5] = {1, 2, 3, 4, 5};  printArray(arr); // 调用函数并传递数组名作为指针  return 0;  
}

✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍

相关文章:

大开眼界,原来指针还能这么玩?

文章目录 第一阶段&#xff1a;基础理解目标&#xff1a;内容&#xff1a;题目&#xff1a;答案解析&#xff1a; 第二阶段&#xff1a;指针与数组目标&#xff1a;内容&#xff1a;题目&#xff1a;答案解析&#xff1a; 第三阶段&#xff1a;指针与字符串目标&#xff1a;内容…...

揭秘选择知识产权管理系统的常见误区,避免踩坑

在当今知识经济时代&#xff0c;知识产权管理对于企业的发展至关重要。为了提高管理效率和效果&#xff0c;许多企业纷纷选择采用知识产权管理系统。然而&#xff0c;在选择过程中&#xff0c;存在着一些容易陷入的误区。 误区一&#xff1a;只关注功能&#xff0c;忽视用户体验…...

计算机组成原理之存储器的分类

1、按存储介质分类&#xff1a; 半导体存储器&#xff1a;使用半导体器件作为存储元件&#xff0c;如TTL和MOS存储器。这类存储器体积小、功耗低、存取时间短&#xff0c;但断电后数据会丢失。 磁表面存储器&#xff1a;使用磁性材料涂覆在金属或塑料基体表面作为存储介质&…...

Linux(不同版本系统包含Ubuntu)下安装mongodb详细教程

一、下载MongoDB 在MongoDB官网下载对应的MongoDB版本&#xff0c;可以点击以下链接快速跳转到下载页面&#xff1a; mongodb官网下载地址 注意选择和自己操作系统一致的platform,可以先查看自己的操作系统 查看操作系统详情 命令&#xff1a; uname -a 如图&#xff1a;操…...

如何扫描HTTP代理:步骤与注意事项

HTTP代理是一个复杂的过程&#xff0c;通常用于寻找可用的代理服务器&#xff0c;以便在网络中实现匿名或加速访问。虽然这个过程可以帮助用户找到适合的代理&#xff0c;但也需要注意合法性和道德问题。本文将介绍如何扫描HTTP代理&#xff0c;并提供一些建议和注意事项。 什…...

【分布式微服务云原生】gRPC与Dubbo:分布式服务通信框架的双雄对决

目录 引言gRPC&#xff1a;Google的高性能RPC框架gRPC通信流程图 Dubbo&#xff1a;阿里巴巴的微服务治理框架Dubbo服务治理流程图 表格&#xff1a;gRPC与Dubbo的比较结论呼吁行动Excel表格&#xff1a;gRPC与Dubbo特性总结 摘要 在构建分布式系统时&#xff0c;选择合适的服务…...

Python | Leetcode Python题解之第450题删除二叉搜索树中的节点

题目&#xff1a; 题解&#xff1a; class Solution:def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:cur, curParent root, Nonewhile cur and cur.val ! key:curParent curcur cur.left if cur.val > key else cur.rightif cur i…...

[Linux]从零开始的网站搭建教程

一、谁适合本次教程 学习Linux已经有一阵子了&#xff0c;相信大家对LInux都有一定的认识。本次教程会教大家如何在Linux中搭建一个自己的网站并且实现内网访问。这里我们会演示在Windows中和在Linux中如何搭建自己的网站。当然&#xff0c;如果你没有Linux的基础&#xff0c;这…...

牛客——xay loves or与 __builtin_popcount的使用

xay loves or 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行思路 题目要求我们计算有多少个正整数 yy 满足条件 x \text{ OR } y sx OR ys。这里的“OR”是指按位或运算。为了理解这个问题&#xff0c;我们需要考虑按位或运算的性质。 对于任意两个位 a_iai​ 和 b_…...

Docker学习和部署ry项目

文章目录 停止Docker重启设置开机自启执行docker ps命令&#xff0c;如果不报错&#xff0c;说明安装启动成功2.然后查看数据卷结果3.查看数据卷详情结果4.查看/var/lib/docker/volumes/html/_data目录可以看到与nginx的html目录内容一样&#xff0c;结果如下&#xff1a;5.进入…...

Linux中设置cd命令后直接显示当前目录下的所有文件

Linux中cd命令后默认是不显示该目录下的文件的&#xff0c;略微不方便。换个环境经常遇到需要重新设置的情况&#xff0c;网上已有很多发帖了&#xff0c;这里主要汇总下比较简单且常见的bash与csh下的设置方法。 实现的本质就是将"cd" 与 "ls"组合起来&am…...

【RTCP】报文学习笔记

在学习中,发现每一篇都只能窥探其中一部分内容。因此学习了多个大神的文章,记录如下: 参考希望_睿智 大神的文章:从零开始精通RTSP之深入理解RTCP协议, 大神对于细节表述非常到位。 read_book/RTP_RTCP /RTP_RTCP协议内容–精选自译.md 大神提供了更多更为详细的信息。 ZL…...

Solidity优质例子(二)物流的增删改查智能合约(附truffle测试)

本合约非常适合新手学习&#xff0c;其包含了基本的增删改查功能以及各个方式的不同之处的总结&#xff0c;本套合约我也编写了truffle测试&#xff0c;学习truffle测试的小伙伴也有福了~ 该合约的主要作用是通过区块链技术实现物流追踪系统的透明化、自动化与防篡改特性&#…...

对android binder的一些疑问及解答

1上层做了那么多封装是否是过度了&#xff0c;难度增加就在于上层的一层层的封装。 最底层直接ioctl和binder驱动交互&#xff08;单纯c语言实现binder交互&#xff09; 第一层&#xff1a;IPCThreadState.transatct封装了对驱动的请求和接受 第二层封装用IBinder.h里面…...

主流麦克风阵列有哪些?

麦克风阵列在HiFi音频方案中是非常重要的一种方案。它的重要性主要体现在音质提升、环境适应性、噪声处理和空间感创造等方面。以下是它的核心作用&#xff1a; 1. 高精度的声音捕捉 在HiFi音频解决方案中&#xff0c;清晰而高保真的声音捕捉是至关重要的。麦克风阵列可以通过…...

几个快速压缩图片大小的方法!

几个快速压缩图片大小的方法&#xff01;在当今这个视觉主导的时代&#xff0c;图片已成为我们日常生活中不可或缺的一部分&#xff0c;它们承载着从壮丽风景到办公文档的各类信息&#xff0c;每个人的电子设备中&#xff0c;往往都保存着海量的图片文件&#xff0c;然而&#…...

怎么避免在pod产生-派生炸弹(Fork Bomb)? k8s(kubernetes)

通过修改kubelet的配置&#xff0c;限制每个pod能用的pid数量即可解决此问题。 kubelet 可以通过设置PodPidsLimit参数来限制每个容器内的进程数量。 1.【kubelet节点】 /var/lib/kubelet/config.yaml文件中添加如下的内容 # 500仅仅是举例 podPidsLimit: 5002.【kubelet节点…...

MySQL中的嵌套查询

1. 嵌套查询的定义 嵌套查询指在一个查询语句的某个部分嵌入一个子查询。 嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先&#xff0c;子查询执行并返回一个结果集&#xff0c;可能是一个值、一行或多行数据。接着&#xff0c;外层查询使用子查询的结果继续对数…...

win10 提示pl2303hxa已停产,请联系供货商解决方案

1. 下载驱动 需要下载老版的驱动&#xff0c;下载地址&#xff1a;https://www.pcsoft.com.cn/soft/211569.html 选择普通下载 或者从CSDN下载&#xff1a; 2. 安装驱动 下载完成后安装下载好的驱动文件&#xff0c;安装后更新pl2303的驱动&#xff0c;如下&#xff1a;…...

浙大数据结构:07-图5 Saving James Bond - Hard Version

这道题也是很有难度&#xff0c;我最开始尝试用Dijkstra来做&#xff0c;发现不是很好处理&#xff0c;用bfs还不错。 机翻&#xff1a; 1、条件准备 n为鳄鱼数量&#xff0c;jump为跳跃距离&#xff0c;headjump为第一次跳跃距离&#xff0c;包括了岛的半径。 isalive标识…...

mat-chem-sim-pred开发者指南:如何贡献新的科学计算算子

mat-chem-sim-pred开发者指南&#xff1a;如何贡献新的科学计算算子 【免费下载链接】mat-chem-sim-pred 面向工业领域&#xff0c;聚焦计算仿真、预测两大核心场景&#xff0c;构建面向流程工业"机理数据"双轮驱动的领域计算层&#xff0c;推动AI for Science在材料…...

STM32串口调试玄学翻车?从XCOM 2.3到2.0的降级避坑实录

STM32串口调试的版本陷阱&#xff1a;当XCOM 2.3让你的开发板"沉默"时 调试嵌入式系统时&#xff0c;最令人抓狂的莫过于硬件一切正常&#xff0c;代码毫无问题&#xff0c;但串口就是拒绝工作。最近在STM32F103ZET6开发板上遇到了一个诡异现象&#xff1a;同一块板子…...

Ubuntu 22.04 下 Nsight System/Compute 2023.3 保姆级安装与权限配置指南(解决libxcb/perf_event报错)

Ubuntu 22.04 下 Nsight System/Compute 2023.3 保姆级安装与权限配置指南 在深度学习与高性能计算领域&#xff0c;NVIDIA的Nsight工具套件是开发者不可或缺的性能分析利器。本文将手把手带你完成Ubuntu 22.04系统上最新版Nsight System 2023.3和Nsight Compute 2023.2的完整…...

R3nzSkin国服特供版:免费体验英雄联盟全皮肤终极指南

R3nzSkin国服特供版&#xff1a;免费体验英雄联盟全皮肤终极指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 还在为英雄联盟皮肤价格昂贵而烦恼吗&…...

告别卡顿!用Sunshine打造私人游戏串流服务器的完整指南

告别卡顿&#xff01;用Sunshine打造私人游戏串流服务器的完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经梦想过在任何设备上流畅玩PC游戏&#xff1f;无论是躺…...

基于XCKU060 FPGA的高速数据采集卡硬件架构与开发实践

1. 项目概述与核心价值最近在做一个高速数据采集与实时处理的项目&#xff0c;对市面上的FPGA加速卡做了一圈调研和测试。其中&#xff0c;青翼这款基于XCKU060 FPGA的4路SFP光纤数据处理板卡&#xff08;型号PCIE734&#xff09;给我留下了挺深的印象。它本质上是一张插在服务…...

别再只盯着AB相了!三引脚EC35编码器在智能面板上的应用与防误触设计

三引脚EC35编码器在智能面板设计中的创新应用与抗干扰实践 旋钮交互在智能家居和工业HMI领域从未失去它的魅力——当用户手指触碰到那个精致的金属环时&#xff0c;物理反馈带来的确定感是纯触控界面无法替代的。但传统AB相编码器的误触发问题长期困扰着产品设计师&#xff1a;…...

从理论到实践:用Magma解锁代数计算新维度

1. 为什么你需要Magma这个代数计算神器 第一次接触Magma是在研究生时期&#xff0c;当时我需要计算一个椭圆曲线上的有理点。用Matlab折腾了整整一周毫无进展&#xff0c;导师随手扔给我一个Magma代码示例&#xff0c;三行命令就解决了问题。那一刻我才明白&#xff0c;专业的事…...

别再乱用Pre Launch Init了!Actor Framework嵌套操作者启动的正确姿势(附LabVIEW 2023示例)

Actor Framework嵌套操作者启动陷阱与实战解决方案 在LabVIEW的Actor Framework&#xff08;AF&#xff09;开发中&#xff0c;嵌套操作者的启动顺序是一个看似简单却暗藏玄机的技术细节。许多中级开发者在项目实践中都曾遇到过这样的场景&#xff1a;明明按照常规思路在Pre La…...

Commit Mono版本管理指南:如何优雅地升级和回滚字体版本

Commit Mono版本管理指南&#xff1a;如何优雅地升级和回滚字体版本 【免费下载链接】commit-mono Commit Mono is an anonymous and neutral programming typeface. 项目地址: https://gitcode.com/gh_mirrors/co/commit-mono Commit Mono是一款匿名且中性的编程字体&a…...