一道面试题教你轻松玩转C++指针

目录
  • 第一次打印
  • 第二次打印
  • 第三次打印
  • 第四次打印
  • 总结

提到指针,真是让人头皮发麻,今天笔者来带你玩转指针。

话不多说先看这道面试题 (注意细节)

int main()
{
char *c[] = {"ENTER","NEW","POINT","FIRST"};
char**cp[] = {c+3,c+2,c+1,c};
char***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}

是不是看着看着就迷糊了,没关系,咱们画图来谈个究竟。

这样一来看起来是不是明显多了,但还是要仔细分析才能保证万无一失。

第一次打印

先进行++p再进行两次解引用.见下图可知我们打印 POINT

第二次打印

先进行 ++CPP    然后解引用  再进行 -- 操作将C+1改变为C  接着再一次解引用 最后+3

我们这里打印结果是 ER

第三次打印

我们先进行CPP[-2]的操作,即相当于 *(CPP-2)但也要注意这里我们CPP的值并未发生改变

在这里我们(CPP-2)的指向用黑线表示,然后再一次解引用,最后+3,此时指向了图中ST

所以我们这里打印ST

第四次打印

CPP[-1]即 *(CPP-1) 这里的CPP[-1][-1] 即相当于*( *(CPP-1)-1 ) 最后+1指向EW

 最后我们运行程序来看看结果

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++指针与引用的区别案例详解

    C++中指针和引用的区别 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个

  • 一文掌握 C++ 智能指针的使用方法

    目录 一.RAII 与引用计数 二.std::shared_ptr 三.std::unique_ptr 四.std::weak_ptr 五.总结 一.RAII 与引用计数 了解 Objective-C/Swift 的程序员应该知道引用计数的概念.引用计数这种计数是为了防止内存泄露而产生的. 基本想法是对于动态分配的对象,进行引用计数,每当增加一次对同一个对象的引用,那么引用对象的引用计数就会增加一次, 每删除一次引用,引用计数就会减一,当一个对象的引用计数减为零时,就自动删除指向的堆内存. 在传

  • C++中的数组引用和指针引用

    目录 C++中的数组引用和指针引用 一.引用的本质 二.数组的引用 三.指针的引用 C++中的数组引用和指针引用 一.引用的本质 我们在讲解引用之前需要知道为什么C++中会单独提出引用这个概念,在前面也提到在C++从一定角度上是C语言的升级版,其实引用时和C语言中的指针一样的功能,并且使得语法更加简洁.既然提到和指针功能相同,那么引用的功能其实就是给空间取别名. 代码解析: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using nam

  • C++指针与数组:指针详解

    目录 一. What(什么是指针) 1. 地址初了解 2. 指针概念 3. 指针与指针变量 二. Why(为什么要有指针) 三. How(如何使用指针) 1. 基本定义 2. 取地址操作符 & 3. 解引用操作符 * 4. 结构体指针 5. 多级指针 6.指针变量的命名规范 四. 我对指针的一些理解 总结 本文主要介绍C语言中指针的基本概念与用法,本博文从零开始讲解指针,只要你了解基本的C语法,相信你看完本文后一定会有所收获. 一. What(什么是指针) 1. 地址初了解 要搞明白什么是指针,

  • C++中指针的详解及其作用介绍

    目录 概述 指向对象的指针 指向对象数据成员的指针 this 指针 this 指针的作用 this 指针的实现 概述 指针 (pointer) 是一个变量, 其指为另一个变量的地址. 即内存位置的直接地址. 指向对象的指针 在建立对象时, 编译系统会为每一个对象分配一定的存储空间, 以存放其成员. 我们可以定义一个指针变量, 用来存放对象的指针. 例如: Time time1; Time *p; // 定义指针, 格式: 类名 *对象指针名 p = &time1; // 将指针指向Time类对象

  • 一道面试题教你轻松玩转C++指针

    目录 第一次打印 第二次打印 第三次打印 第四次打印 总结 提到指针,真是让人头皮发麻,今天笔者来带你玩转指针. 话不多说先看这道面试题 (注意细节) int main() { char *c[] = {"ENTER","NEW","POINT","FIRST"}; char**cp[] = {c+3,c+2,c+1,c}; char***cpp = cp; printf("%s\n", **++cpp);

  • 教你轻松玩转FTP

    笔者每天都要从FTP服务器上下载文件.所谓"工欲善其事,必先利其器",笔者选择的是FTP客户端新秀--FTPRush.FTPRush的前身是UltraFXP,它与传统的FlashFXP.CuteFTP相比,拥有更强大的功能,比如多窗口操作.更强大的脚本命令支持.更方便的界面定制等等.下面是笔者使用FTPRush几个月以来总结的一些"超短"技巧,如果你掌握了它们,相信你的FTP操作会玩得更酷! 1.在FTPRush的"本地窗口"中,如果你直接选中某

  • 从一道面试题看你对java的理解程度

    简介 最近有点忙,很久没更新文章了,后面会慢慢恢复...回顾正题 最近看到一篇文章,关于一道面试题,先看一下题目,如下: public static void main(String[] args) { Integer a = 1; Integer b = 2; System.out.printf("a = %s, b = %s\n", a, b); swap(a, b); System.out.printf("a = %s, b = %s\n", a, b); }

  • Python openpyxl模块学习之轻松玩转Excel

    目录 前言 openpyxl 安装 打开/创建工作簿 访问工作表 获取单元格信息 修改工作表 修改样式 前言 当你需要每天对 Excel 做大量重复的操作,如果只靠人工来做既浪费时间,又十分枯燥,好在 Python 为我们提供了许多操作 Excel 的模块,能够让我们从繁琐的工作中腾出双手. 今天就和大家分享一个快速处理 Excel 的模块 openpyxl,它的功能相对与其他模块更为齐全,足够应对日常出现的问题. openpyxl 安装 直接在命令提示符中输入. pip install ope

  • 轻松玩转VMWare虚拟机之安装GHOST系统图文教程第1/2页

    VMWare是一个"虚拟PC"软件.它使你可以在一台机器上同时运行二个或更多Windows.DOS.LINUX系统.与"多启动"系统相比,VMWare采用了完全不同的概念.多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器.VMWare是真正"同时"运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换.而且每个操作系统你都可以进行虚拟的分区.配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接

  • 教你轻松记住JS正则表达式

    前言 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等.正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式.模式描述在搜索文本时要匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 为啥要有正则表达式呢?其实就是因为计算机笨(这话不是我说的),比如123456@qq.com我们一看就是邮箱

  • 轻松玩转Java配置的Classpath

    和Java类路径(classpath)打交道的过程中,开发者偶尔会遇到麻烦.这是因为,类装载器实际装入的是哪一个类有时并不显而易见,当应用程序的classpath包含大量的类和目录时,情况尤其严重.本文将提供一个工具,它能够显示出被装入类文件的绝对路径名. 一.Classpath基础 Java虚拟机(JVM)借助类装载器装入应用程序使用的类,具体装入哪些类根据当时的需要决定.CLASSPATH环境变量告诉类装载器到哪里去寻找第三方提供的类和用户定义的类.另外,你也可以使用JVM命令行参数-cla

  • 教大家轻松制作Bootstrap漂亮表格(table)

    学习了runoob.com网站中的bootstrap内容之后,参照其中的内容自己做一下总结,以便帮助在这方面有疑惑的朋友,也有助于自己更好的消化所学的内容. 我们应该庆幸自己活在这样一个互联网时代,开放.共享.很多之前我们费尽心思去实现的效果已经有前辈为我们总结出来并做成很好的框架,共享出来让我们使用,使得我们轻松就能实现很漂亮的效果. 下面就使用一个实例来讲一下如何使用Bootstrap现成的css样式直接加在我们的table表格上,我们只需要写很少的代码就能轻松制作漂亮表格. 比如我们要制作

  • 轻松玩转feedsky:优化和调教自己博客的RSS

    现在许许多多的网民都拥有了自己的博客.播客,用来展示自己的个人信息.相伴而来的,RSS方式阅读越来越受网民的青睐.各种各样的RSS阅读器纷纷出台,现在比较流行的有bloglines.google和yahoo的RSS阅读器.国内的有热度网.周伯通等等. 在越来越多阅读器出现之后,RSS就成作者和读者,即博客页面之外另一个联系通路.但是随之就出现了很多问题: 首先:作为一种新的阅读方式,现在大多数网站的RSS页面提供的是全代码方式.这样很多网友都不知道如何使用RSS方式进行订阅. 其次,作为作者,需

  • 运用js教你轻松制作html音乐播放器

    用HTML做了个音乐播放器,可以循环播放,选择歌曲,以及自动播放下一首,运用了js和json知识,下面是效果图和源码,有兴趣的可以试试哦 效果图: 源码:html <span style="color:#999999;"><!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>音乐播放器</title> <sc

随机推荐