大开眼界,原来指针还能这么玩?
文章目录
- 第一阶段:基础理解
- 目标:
- 内容:
- 题目:
- 答案解析:
- 第二阶段:指针与数组
- 目标:
- 内容:
- 题目:
- 答案解析:
- 第三阶段:指针与字符串
- 目标:
- 内容:
- 题目:
- 答案解析:
- 第四阶段:指针与函数
- 目标:
- 内容:
- 题目:
- 答案解析:
- 第五阶段:复杂指针与多级指针
- 目标:
- 内容:
- 题目:
- 答案解析:
🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨
第一阶段:基础理解
目标:
理解指针的基本概念、声明、初始化和基本操作。
内容:
指针的基本概念:指针是存储内存地址的变量。
指针的声明和初始化:例如,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等你哦!我的主页😍
相关文章:

大开眼界,原来指针还能这么玩?
文章目录 第一阶段:基础理解目标:内容:题目:答案解析: 第二阶段:指针与数组目标:内容:题目:答案解析: 第三阶段:指针与字符串目标:内容…...

揭秘选择知识产权管理系统的常见误区,避免踩坑
在当今知识经济时代,知识产权管理对于企业的发展至关重要。为了提高管理效率和效果,许多企业纷纷选择采用知识产权管理系统。然而,在选择过程中,存在着一些容易陷入的误区。 误区一:只关注功能,忽视用户体验…...
计算机组成原理之存储器的分类
1、按存储介质分类: 半导体存储器:使用半导体器件作为存储元件,如TTL和MOS存储器。这类存储器体积小、功耗低、存取时间短,但断电后数据会丢失。 磁表面存储器:使用磁性材料涂覆在金属或塑料基体表面作为存储介质&…...

Linux(不同版本系统包含Ubuntu)下安装mongodb详细教程
一、下载MongoDB 在MongoDB官网下载对应的MongoDB版本,可以点击以下链接快速跳转到下载页面: mongodb官网下载地址 注意选择和自己操作系统一致的platform,可以先查看自己的操作系统 查看操作系统详情 命令: uname -a 如图:操…...

如何扫描HTTP代理:步骤与注意事项
HTTP代理是一个复杂的过程,通常用于寻找可用的代理服务器,以便在网络中实现匿名或加速访问。虽然这个过程可以帮助用户找到适合的代理,但也需要注意合法性和道德问题。本文将介绍如何扫描HTTP代理,并提供一些建议和注意事项。 什…...
【分布式微服务云原生】gRPC与Dubbo:分布式服务通信框架的双雄对决
目录 引言gRPC:Google的高性能RPC框架gRPC通信流程图 Dubbo:阿里巴巴的微服务治理框架Dubbo服务治理流程图 表格:gRPC与Dubbo的比较结论呼吁行动Excel表格:gRPC与Dubbo特性总结 摘要 在构建分布式系统时,选择合适的服务…...

Python | Leetcode Python题解之第450题删除二叉搜索树中的节点
题目: 题解: 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已经有一阵子了,相信大家对LInux都有一定的认识。本次教程会教大家如何在Linux中搭建一个自己的网站并且实现内网访问。这里我们会演示在Windows中和在Linux中如何搭建自己的网站。当然,如果你没有Linux的基础,这…...

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

Docker学习和部署ry项目
文章目录 停止Docker重启设置开机自启执行docker ps命令,如果不报错,说明安装启动成功2.然后查看数据卷结果3.查看数据卷详情结果4.查看/var/lib/docker/volumes/html/_data目录可以看到与nginx的html目录内容一样,结果如下:5.进入…...
Linux中设置cd命令后直接显示当前目录下的所有文件
Linux中cd命令后默认是不显示该目录下的文件的,略微不方便。换个环境经常遇到需要重新设置的情况,网上已有很多发帖了,这里主要汇总下比较简单且常见的bash与csh下的设置方法。 实现的本质就是将"cd" 与 "ls"组合起来&am…...
【RTCP】报文学习笔记
在学习中,发现每一篇都只能窥探其中一部分内容。因此学习了多个大神的文章,记录如下: 参考希望_睿智 大神的文章:从零开始精通RTSP之深入理解RTCP协议, 大神对于细节表述非常到位。 read_book/RTP_RTCP /RTP_RTCP协议内容–精选自译.md 大神提供了更多更为详细的信息。 ZL…...

Solidity优质例子(二)物流的增删改查智能合约(附truffle测试)
本合约非常适合新手学习,其包含了基本的增删改查功能以及各个方式的不同之处的总结,本套合约我也编写了truffle测试,学习truffle测试的小伙伴也有福了~ 该合约的主要作用是通过区块链技术实现物流追踪系统的透明化、自动化与防篡改特性&#…...
对android binder的一些疑问及解答
1上层做了那么多封装是否是过度了,难度增加就在于上层的一层层的封装。 最底层直接ioctl和binder驱动交互(单纯c语言实现binder交互) 第一层:IPCThreadState.transatct封装了对驱动的请求和接受 第二层封装用IBinder.h里面…...
主流麦克风阵列有哪些?
麦克风阵列在HiFi音频方案中是非常重要的一种方案。它的重要性主要体现在音质提升、环境适应性、噪声处理和空间感创造等方面。以下是它的核心作用: 1. 高精度的声音捕捉 在HiFi音频解决方案中,清晰而高保真的声音捕捉是至关重要的。麦克风阵列可以通过…...

几个快速压缩图片大小的方法!
几个快速压缩图片大小的方法!在当今这个视觉主导的时代,图片已成为我们日常生活中不可或缺的一部分,它们承载着从壮丽风景到办公文档的各类信息,每个人的电子设备中,往往都保存着海量的图片文件,然而&#…...
怎么避免在pod产生-派生炸弹(Fork Bomb)? k8s(kubernetes)
通过修改kubelet的配置,限制每个pod能用的pid数量即可解决此问题。 kubelet 可以通过设置PodPidsLimit参数来限制每个容器内的进程数量。 1.【kubelet节点】 /var/lib/kubelet/config.yaml文件中添加如下的内容 # 500仅仅是举例 podPidsLimit: 5002.【kubelet节点…...
MySQL中的嵌套查询
1. 嵌套查询的定义 嵌套查询指在一个查询语句的某个部分嵌入一个子查询。 嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先,子查询执行并返回一个结果集,可能是一个值、一行或多行数据。接着,外层查询使用子查询的结果继续对数…...

win10 提示pl2303hxa已停产,请联系供货商解决方案
1. 下载驱动 需要下载老版的驱动,下载地址:https://www.pcsoft.com.cn/soft/211569.html 选择普通下载 或者从CSDN下载: 2. 安装驱动 下载完成后安装下载好的驱动文件,安装后更新pl2303的驱动,如下:…...

浙大数据结构:07-图5 Saving James Bond - Hard Version
这道题也是很有难度,我最开始尝试用Dijkstra来做,发现不是很好处理,用bfs还不错。 机翻: 1、条件准备 n为鳄鱼数量,jump为跳跃距离,headjump为第一次跳跃距离,包括了岛的半径。 isalive标识…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...