本文主要介绍 C/C++ 编程语言中指针(pointer)的相关知识,同时通过示例代码介绍 C/C++ 编程语言中指针的常见用法。

1 What

指针,是 C/C++ 编程语言中的一个重要概念。指针通常可以理解为内存地址,而指针变量就是用来存放内存地址的变量。在同一 CPU 架构下,不同类型的指针变量所占用的存储单元的长度是相同的(而存放数据的变量因数据类型的不同,所占用的存储空间长度也不同)。例如,在 64 位操作系统(安装在 X64 CPU 架构之上)中,指针变量占用 8 字节。通过使用指针,不仅可以对数据本身进行操作,也可以对存储该数据的变量地址进行操作。

在 C/C++ 编程语言中,指针变量存储的是其指向的对象的首地址,指针指向的对象可以是变量(注意,指针变量也是变量)、数组、函数、对象等占据存储空间的实体。

下面通过一个简单的指针及其指向对象的信息关系图来进一步介绍指针。现假设有一个字符变量“c”,其内容为“A”,又有一个名称为“pChar”的指针(变量)指向该字符变量,因此字符变量“c”与指向其的指针“pChar”关系如下图所示:

通过上图内容,可知:

  • 字符变量“c”的内存地址为“0x7ffefdc3ae00”;
  • 指针变量“pChar”指向的字符变量“c”对应的内存地址为“0x7ffefdc3ae00”,因此,指针变量的内容即为“0x7ffefdc3ae00”,从这里就可以知道,指针变量与其他变量不同,其存储的内容是内存地址(而其他变量通常存储用户数据);
  • 指针变量也是一种变量,其也是存储在内存空间中的,在上图中未将指针变量画在内存空间中是为了便于观察指针变量及其指向对象之间的关系。

2 用法示例

在本章中,将通过示例代码来介绍 C/C++ 编程语言中指针的具体用法。

2.1 示例1

示例1的代码内容如下:

#include <iostream>using namespace std;int main()
{char c = 'A';cout << "c is: " << c << endl;cout << "address of c is: " << (void*)&c << endl << endl;char* pChar1 = &c;cout << "*pChar1 is: " << *pChar1 << endl;cout << "pChar1 is: " << (void*)pChar1 << endl;cout << "address of pChar1 is: " << &pChar1 << endl << endl;char* pChar2 = pChar1;cout << "*pChar2 is: " << *pChar2 << endl;cout << "pChar2 is: " << (void*)pChar2 << endl;cout << "address of pChar2 is: " << &pChar2 << endl << endl;char** pChar3 = &pChar2;cout << "**pChar3 is: " << **pChar3 << endl;cout << "*pChar3 is: " << (void*)(*pChar3) << endl;cout << "pChar3 is: " << (void*)pChar3 << endl;cout << "address of pChar3 is: " << &pChar3 << endl << endl;return 0;
}

编译并执行上述代码,(可能的)结果如下:

通过上述代码及其执行结果,可知:

  • 在 C/C++ 编程语言中,通过取地址运算符“&”可以获取到变量的内存地址;
  • 指向一般变量(如本例中的字符变量 c)的指针变量(如本例中的 pChar1 和 pChar2),为一级指针,而指向一级指针的指针变量(如本例中的指针变量 pChar3),为二级指针,依此类推;
  • 对指针变量进行赋值操作,需要满足指针级别的对应关系,如一级指针赋值给一级指针、二级指针赋值给二级指针,否则编译器会报错;
  • 通过指针操作符“*”可以获取指针变量指向的对象的内容,如本例中通过“*pChar1”可获取指针变量 pChar1 指向的字符变量 c 的内容;
  • 对于二级指针,使用一个指针操作符“*”获取到的是该指针指向的指针变量的内容,使用两个指针操作符“*”才能获取到该指针变量指向的指针变量指向的对象的内容——有点绕,具体看代码及运行结果:)
  • 在 C++ 编程语言中,可通过将内存地址强转为 void* 类型的方式,来打印其内容;

本例的指针及其指向的对象的相关信息,如下图所示:

C/C++编程语言中指针(pointer)介绍相关推荐

  1. c语言字符串加减_C语言中指针的介绍

    C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...

  2. C语言中指针的介绍(终极版!!!)

    文章目录 指针 一:指针是什么? 1:内存 2:地址的生成 3:数据的储存 4:指针变量 (1):指针变量的大小 (2):如何一口气定义好几个指针变量? 二:指针与指针类型 1:指针+-整数 2.指针 ...

  3. c语言中的指针语法,C语言中指针的用法介绍

    C语言中指针的用法介绍 for(int i=0;i { num+=*s;s++; } return num; ) 这个例子中的函数 fun统计一个字符串中各个字符的 ASCII 码值之和.前面说了,数 ...

  4. 编程语言中字面常量(literal)的详细介绍(关键词:Java,文字量,直接量,常量,常值,字面量,字面值,实字)

    一.问题背景 博主在复习<Java疯狂讲义>第3章(数据类型和运算符)时,其中在3.2.3 Java关键字中提到了直接量的概念: 如上图所述,原文提到: TRUE. FALSE 和 NUL ...

  5. 初学者对C语言中指针的爱恨情仇

    C语言中指针和数组的爱恨情仇 文章目录 C语言中指针和数组的爱恨情仇 一.前言 二.为什么学指针 三.说明 四.跟我一起学 (一)C语言中的*和& 1.C语言中为什么存在&和* 2.& ...

  6. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,终于把心中的疑惑彻底解开了.现在记录下我对指针声明的理解,顺便说下如何在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  7. 基于对象和面向对象编程范式辨析和主流编程语言中的应用

    基于对象和面向对象编程范式辨析和主流编程语言中的应用 前言 本文的目的是想告诉大家,为什么C++的模板这么强大.为什么Ruby的Duck Typing(像鸭子那样编程)这么强大! 基于对象和面向对象编 ...

  8. 六、Go编程语言中的函数式编程

    @Author:Runsen 任何编程语言都是众所周知的面向对象编程,还有日渐流行的函数式编程,当然Go也不例外,这也是本文的重点..我可以这么说,Go的功力深不深完全就是看函数式编程和面向对象编程. ...

  9. 面向对象编程语言中的接口(Interface)

    在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到"接口测试"时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中 ...

  10. php引用代码_PHP引用是什么?php中引用的介绍(代码实例)

    本篇文章给大家带来的内容是关于PHP引用是什么?php中引用的介绍(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 什么是引用 在 PHP 中引用是指用不同的名字访问 ...

最新文章

  1. R语言可视化分面图、单变量分组多水平t检验并指定参考水平、可视化单变量分组多水平分面箱图(faceting boxplot)并添加显著性水平、指定显著性参考水平、添加抖动数据点
  2. 8则实用的Linux Shell命令
  3. XO Wave-数字音频编纂软件
  4. python中静态变量和静态方法_【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)...
  5. 最新最全的ASP.NET学习资源大全
  6. android 使用webview访问优酷无法播放视频的问题
  7. 中关村-DIY高清之HDMI线导购
  8. signature=d5d679bcec778027f40bcf8a2796c61b,Processing damaged items using image data lift
  9. html hint标签,htmlhint
  10. winform模拟登陆网页_Python爬虫使用selenium爬取群成员信息(全自动实现自动登陆)...
  11. centos 网卡状态
  12. mib节点 snmp trap_(转)浅谈 Linux 系统中的 SNMP Trap
  13. 使用stress,压力测试K8S的POD cpu
  14. word里画的流程图怎么全选_word画流程图 Word中绘制流程图的正确姿势,这招大多数人不知道...
  15. [地图]通用网格地图库:粗糙地形导航的实现和用例
  16. mysql io瓶颈_服务器IO瓶颈对MySQL性能的影响
  17. 【css】css实现图片或动图边缘模糊化处理(附示例代码)
  18. 我的疫情时代——记在家的那个学期
  19. Java se官方中文API下载链接
  20. 【转】在线网页取色器

热门文章

  1. 一种保护应用程序的方法 模拟Windows PE加载器,从内存资源中加载DLL
  2. 微信小程序相关三、css写小黄人
  3. 51nod 1605:棋盘问题
  4. 【转】一个新的UIButtonMessage 给NGUI,使用委托,自动选择Receiver提供的方法
  5. aardio中获取网络图片经GDI处理后保存到本地
  6. 指数有限的子群存在一个右陪集代表元系,同时也是左陪集代表元系
  7. bash脚本编程之条件判断、条件测试
  8. 此页的状态信息无效,可能已损坏---应用程序中的服务器错误---
  9. STM32打印log--使用J-Link RTT Viewer
  10. 2018-2019-2 20162318《网络对抗技术》Exp2 后门原理与实践