文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

EasyC++,C++指针初探

2024-12-02 18:35

关注

大家好,我是梁唐。

这是EasyC++系列的第15篇,咱们来聊聊C++中的指针。

想要追求更好阅读体验的同学,可以点击文末的「阅读原文」,访问github仓库。

指针初探

前言

C++可以说是成也指针、败也指针。依靠着指针,我们可以灵活地操控变量内存地址,实现很多独有的功能。但也正因为指针,尤其是使用不当的时候会产生许多的问题。导致许多工程师对于C++以及指针深恶痛绝,以至于C++之后的许多语言都摒弃了指针的设计,比如Java和Python。

我们先把头疼的内容放一放,先从一些简单的概念开始。

首先要明确的是指针是一个变量,它特殊的点在于虽然同样是变量,它存储的并不是值,而是一个内存地址。内存地址顾名思义就是存放在内存当中的位置,对于非指针的变量, 我们也可以使用&操作符去获取它的地址。这就是为什么我们使用scanf在读取变量的时候,需要在变量名之前加上一个&符号。

  1. int a; 
  2. scanf("%d", &a); 

目的就是为了将a变量的地址传给scanf函数,从而将屏幕当中读取到的内容填写到a变量对应的地址当中。

我们也可以直接输出一个变量的地址,但输出结果是一个十六进制的数,代表一个内存位置。如果大家学过汇编或者是了解过底层的话,应该不陌生。这个输出的结果是给机器看的,人类无法读懂。

  1. int a; 
  2. cout << &a << endl; 

声明和初始化

指针和普通变量不同,它存储的值是地址。所以在声明指针的时候,也会有一点细小的区别。我们通过*符号创建指针,*运算符称为间接值(indirect value)或解除引用(dereferencing),现在理解这两个概念可能有些费劲,没关系我们可以先放一放。只许看记住使用*创建指针即可,*写在类型和变量名中间,如:

  1. int * p; 

这样我们就创建了一个int型的指针,它的名字叫做p。关于*的位置,有些人喜欢紧跟着变量类型,有些人喜欢紧跟着变量名。其实都可以,看个人喜好。传统上来说C程序员喜欢后者,突出ptr是一个指针。

  1. int *ptr; 

C++程序员更喜欢前者,突出是一个int型的指针:

  1. int* ptr; 

这两种都可以,对于编译器来说没有任何区别。但是要注意的是,每一个指针变量都需要一个*:

  1. int a, *ptr; 

前面说了,由于指针的值是一个地址,所以我们在对指针进行初始化或者赋值的时候,就需要用到取地址符。

  1. int a = 3; 
  2. int *p = &a; // 获取了a的地址 

当我们有了指针变量之后,我们可以使用*来访问它指向的内存地址的值。

  1. int a = 3; 
  2. int *p = &a; 
  3.  
  4. cout << *p << endl; //output: 3 

要注意的是,由于指针p指向a的地址,所以当我们通过*符号修改了p指向的值之后,a的值一样会发生变化。

  1. *p = 5; 
  2. cout << a << endl; //output: 5 

 正因为指针有这样的特性,所以使用的时候千万小心……

本文转载自微信公众号「Coder梁」,可以通过以下二维码关注。转载本文请联系Coder梁公众号。

 

来源: Coder梁内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯