秒懂百科,C++如此简单丨第十五天:指针

目录

必看信息

Everyday English

前言 

📝了解指针

📝定义指针

📝分析指针

📝运用指针

总结


必看信息

▶本篇文章由爱编程的小芒果原创,未经许可,严禁转载。

▶本篇文章被收录于秒懂百科,C++如此简单专栏,欢迎订阅。

专栏亮点

1.每篇文章质量高,质量分保证在80分以上。

2.文章的内容清晰有条理,图文并茂,附有yuan。

3.每个知识点讲解详细,会有很多补充扩展。

4.若哪个知识点没有懂,可以私信我,我会尽可能地帮助你。

Everyday English

"The only thing we can do is to do our best and not worry about the future." - Confucius

我们唯一能做的就是尽全力,不为未来担忧。- 孔子

前言 

在计算机科学中,指针是一个重要的概念,尤其在诸如C和C++等语言中。指针允许我们直接访问和操作内存地址,提供了强大的数据处理能力。理解指针对于深入理解计算机工作原理以及解决复杂问题至关重要。 

📝了解指针

首先,我们来看什么是变量。在计算机编程中,变量是一个存储空间,用来保存一些值。每个变量都有一个名称,通过这个名称我们可以访问它的值。变量最直白的理解就是:变化的值

然后,我们来看指针。指针其实也是一个变量,但它存储的不是一个具体的值,而是一个地址。这个地址指向另一个变量的位置。所以,当我们说一个指针指向一个变量时,意思是这个指针存储的是那个变量的内存地址。

在C++中,我们用“*”这个符号来表示一个变量是指针。比如,“int *p”这个声明,意思是“p”是一个指向整数的指针。

📝定义指针

首先我们要生命一下指针,数据类型你可以根据需要去修改

int *p;//声明一个整型指针

然后我们可以初始化这个指针,让它指向一个特定的内存地址,我们可以让p指向一个整数值:

int val=10;  
ptr = &val;//个人建议把指针前后可以空一格,看得更舒服美观

这里的“&”符号用于获取变量的内存地址,学过C语言的朋友们应该清楚,scanf语句需要用到“&”:

int n;
scanf("%d",&n);

一旦我们有了指向某个变量的指针,我们就可以通过指针来访问和修改变量的值。例如,我们可以使用“*”符号来获取指针指向的变量的值:

int val = 10;  
int *p = &val;  
cout<<"The value is:"<<*p<<endl;

分析上述代码,首先我们定义val=10,而指针p访问并获取了val的值,所以输出应该是:

指针还可以修改变量的值,如:

int val = 10;  
int *p = &val;  
*p=25;
cout<<"The value is:"<<*p<<endl;

因为*p的值改变成了25,所以输出理所当然是:

📝分析指针

指针的利:

  1. 动态内存管理: 指针可以用于动态内存分配,这在处理大量数据或需要根据运行时情况调整内存使用时非常有用。
  2. 数据共享与修改: 通过指针,多个函数或对象可以共享和修改同一内存地址中的数据,有助于实现更高效的数据共享和同步。
  3. 提高性能: 在某些情况下,使用指针可以直接访问内存,可能比常规变量访问更快。

指针的弊:

  1. 增加复杂性: 指针和指针操作增加了代码的复杂性,可能导致阅读和理解代码的难度增加。
  2. 安全风险: 不正确的指针操作可能导致缓冲区溢出、越界访问等安全问题,可能被利用进行攻击。
  3. 性能开销: 在某些情况下,不恰当的指针使用可能导致额外的内存访问和处理器开销。

时间复杂度:

当指针执行赋值运算时,复杂度为O(1)

📝运用指针

题目:交换两个变量的值

题目描述:给定两个变量a和b,请使用指针来交换它们的值。

要求:只能使用指针进行交换,不能使用其他变量或直接赋值。

思路点拨:

  1. 定义两个指针变量,分别指向变量a和b的地址。
  2. 使用指针修改变量的值,将a的值赋给b的地址所指向的变量,将b的值赋给a的地址所指向的变量。(可以用我们之前学过的交换函数,也可以写一个临时变量tmp)

AC代码:

#include<bits/stdc++.h>  
using namespace std;
void swap(int *a,int *b) 
{  int tmp = *a;  //将a的值存储到临时变量temp中  *a = *b;       //将b的值赋给a的地址所指向的变量  *b = tmp;      //将临时变量temp(原a的值)赋给b的地址所指向的变量  
}  
int main() 
{  int a=5,b=10;  //值可以自己修改 cout<<"交换前:a="<<a<<",b="<<b<<endl;swap(&a, &b);cout<<"交换后:a="<<a<<",b="<<b<<endl; return 0;  
}

运行截图:

总结

本篇文章讲解了指针的运用及定义,欢迎大家指出错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329444.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码整洁之道:一个提升代码可读性的小技巧

写在开头 如何写好代码&#xff0c;一千个人眼中有一千个哈姆雷特&#xff0c;但是我认为有一点的是写好代码的公理&#xff0c;不可撼动&#xff0c;即对代码可读性的追求。最近在工作中面对了太多可读性不佳的代码&#xff0c;使得对于旧有代码的维护和分析困难重重&#xf…

Vue3 watch 的使用,如何监听一个对象中的属性值的变化 vue3 + ts + vite

Vue3 watch 的使用&#xff0c;如何监听一个对象中的属性值的变化 由 vue2 转到 vue3 ts vite 之后都不会写这些玩意了。搜了下&#xff0c;找到了答案&#xff1a; vue2 的 watch <script>export default {watch: {$route.query.id(newValue){// 可以这样监听路由的…

双十一的祈祷【算法赛】

问题描述 双十一&#xff0c;不仅是购物狂欢节&#xff0c;更有 "光棍节" 之称。这源于 11:1111:11 由四个 11 构成&#xff0c;象征着单身。 作为大学生的小蓝也想经历甜甜的校园恋爱&#xff0c;于是他找到了爱神丘比特&#xff0c;向他祈祷能为自己带来一段邂逅…

IDEAVsCode常用插件

IDEA&VsCode常用插件 IDEA lombok、mybatisx 插件 Vscode Vetur —— 语法高亮、智能感知、Emmet 等&#xff0c;包含格式化功能&#xff0c; AltShiftF &#xff08;格式化全文&#xff09;&#xff0c;CtrlK CtrlF&#xff08;格式化选中代码&#xff0c;两个 Ctrl需…

【数据库】聊聊常见的索引优化-下

分页查询优化 主键排序 在实际的使用中&#xff0c;通过limit 10000,10 查询第10000记录到10010记录&#xff0c;mysql执行的时候是按照将前10010记录全部统计出来&#xff0c;然后剔除前10000条记录&#xff0c;选择后10条记录。这样来看的话&#xff0c;效率不高。 如果数据…

小微企业在银行信贷相关产品和机器学习建模案例_论文科研_企业调研

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

vue3 + TS + vite 搭建中后台管理系统(完整项目)

vue3 TS vite 搭建中后台管理系统&#xff08;完整项目&#xff09; 前言1、搭建步骤及方法2、集成多种插件功能&#xff0c;实现中后台按需使用3、新手学TS如何快速进入状态、定义TS类型4、layout搭建四款常见风格6、大屏搭建效果5、vue3Ts运营管理系统总结&#xff1a; 前言…

【Java】设计模式之保护性暂停

设计模式之保护性暂停 Guarded Suspension&#xff0c;这个设计模式&#xff0c;主要用在一个线程等待另一个线程的执行结果&#xff08;发请求等待响应&#xff09; 有一个结果需要从一个线程传递到另一个线程&#xff0c;传递只进行一次&#xff0c;用设计模式保护性暂停。 …

c语言的一些题(2024_1_7)

变种水仙花数 #include <stdio.h>int main() {int a 10000;for (; a < 100000; a){if ((a / 10000) * (a % 10000) (a / 1000) * (a % 1000) (a / 100) * (a % 100) (a / 10) * (a % 10) a)printf("%d ", a);}return 0; } //变种水仙花数 - Lily Num…

JavaScript异常处理实战

前言 之前在对公司的前端代码脚本错误进行排查&#xff0c;试图降低 JS Error 的错误量&#xff0c;结合自己之前的经验对这方面内容进行了实践并总结&#xff0c;下面就此谈谈我对前端代码异常监控的一些见解。 本文大致围绕下面几点展开讨论&#xff1a; JS 处理异常的方式…

【嵌入式】Makefile 学习笔记记录 | 嵌入式Linux

文章目录 前言一、Makefile的引入——最简单的gcc编译过程二、Makefile的规则三、Makefile的语法3.1、通配符3.2、假想目标 .phony3.3、即时变量 延时变量 四、Makefile的函数4.1、foreach4.2、filter4.3、wildcard4.4、patsubst 五、Makefile升级5.1、包含头文件在内的依赖关系…

二叉树算法题(一)

根据二叉树创建字符串 根据二叉树创建字符串 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需要省…