服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - EasyC++,C++指针初探

EasyC++,C++指针初探

2021-10-27 22:40Coder梁梁唐 C/C++

C++可以说是成也指针、败也指针。依靠着指针,我们可以灵活地操控变量内存地址,实现很多独有的功能。但也正因为指针,尤其是使用不当的时候会产生许多的问题。

EasyC++,C++指针初探

大家好,我是梁唐。

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

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

指针初探

前言

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

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

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

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

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

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

  1. inta;
  2. cout<<&a<

EasyC++,C++指针初探

声明和初始化

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

  1. int*p;

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

  1. int*ptr;

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

  1. int*ptr;

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

  1. inta,*ptr;

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

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

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

  1. inta=3;
  2. int*p=&a;
  3. cout<<*p<output:3

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

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

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

原文链接:https://mp.weixin.qq.com/s/F3vDVfduavhfZV1pRj5h-Q

延伸 · 阅读

精彩推荐
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30