看了挺长一段时间的C了,基本上是把基础语法过关了,偶然遇见一个C++的面试题,分析一下,作为一段时间的打卡。

代码在编译器里边打一下,

 #include <iostream>

 using namespace std;

 int main(int argc,char** argv)
{
char *str[]={"welcome","to","boyaa","shenzhen"};
char**p=str+; str[]=(*p++)+;
str[]=*(p+);
str[]=p[]+;
cout<<str[]-str[]<<endl; str[]=p[]+(str[]-str[]);
cout<<str[]<<" "<<str[]<<" "<<str[]<<" "<<str[]<<endl;
return ;
}

代码运行结果是:

o shenzhen nzhen en

Process returned  (0x0)   execution time : 0.366 s
Press any key to continue.

下面是自己简单的分析过程,中途可能会有些小错误(大家给我提醒)————————》

首先是一些初始化步骤。

i)申请一个字符串数组,也就是数组中保存的都是字符串的地址:
char *str[]={"welcome","to","boyaa","shenzhen"};
str在这里相当于是个常量的二级指针

ii)定义一个二级指针char**p=str+1;
同时给P赋值&str[1]

iii)好的,重头戏来了,回到刚刚提到的str字符串数组。一下都是对字符串数组的一系列操作
str[0]=(*p++)+1;
str[1]=*(p+1);
str[2]=p[1]+3;
cout<<str[2]-str[1]<<endl;

1)首先第一个(*p++)+1,其中的*p++优先级是*(p++),然后先将p的值返回给表达式,相当于*p,p++;
那么str[0]=*p+1等价于str[1]+1等价于str[1][2],也就是从to的第二个字母开始到最后
请注意,这个时候的字符串数组变化了,变成
char *str[]={"o","to","boyaa","shenzhen"};

2)好的,第二个
str[1]=*(p+1);其中*(p+1)等于*(&str[2]+1)等于*(&str[3])等于str[3],也就是有
char *str[]={"o","shenzhen","boyaa","shenzhen"};

3)第三个str[2]=p[1]+3;其中的p[1]+3等价于str[3]+3等价于"shenzhen"+3等价于"nzhen"
"shenzhen"并不是一个字符串,是一个地址。所有的字符串常量都是地址。
这个时候也就是将"nzhen"的地址赋值给str[3],所以有变化
char *str[]={"o","shenzhen","nzhen","shenzhen"};

4)那么最后是进行第一个输出
cout<<str[2]-str[1]<<endl;
看起来好像是两个字符串相减,结果是字符串的首地址相减的值"shenzhen"-"nzhen"等于s的地址减去n的地址
结果是3

5)第五步是接着赋值,str[3]=p[0]+(str[2]-str[1]);
也就是str[3]="nzhen"+3="en",这是一个地址的运算操作
更新str有
char *str[]={"o","shenzhen","nzhen","en"};

6)最后是结果输出
cout<<str[0]<<" "<<str[1]<<" "<<str[2]<<" "<<str[3]<<endl;
o shenzhen nzhen en

C++之指针例题解析的更多相关文章

  1. 娓娓道来c指针 (4)解析c的声明语句

    (4)解析c的声明语句 在继续探索c指针之前.有必要来解析下c语言中复杂的声明语法. 仅仅须要记住两则:一个原则,一个规则. 原则:先看标示符. 规则:运算符优先级是规则. 举例说明 1.最简单的 i ...

  2. 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析

    <编译原理>画 DAG 图与求优化后的 4 元式代码- 例题解析 DAG 图(Directed Acylic Graph)无环路有向图 (一)基本块 基本块是指程序中一顺序执行的语句序列, ...

  3. 《编译原理》构造 LL(1) 分析表的步骤 - 例题解析

    <编译原理>构造 LL(1) 分析表的步骤 - 例题解析 易错点及扩展: 1.求每个产生式的 SELECT 集 2.注意区分是对谁 FIRST 集 FOLLOW 集 3.开始符号的 FOL ...

  4. 《编译原理》控制流语句 if 和 while 语句的翻译 - 例题解析

    <编译原理>控制流语句 if 和 while 语句的翻译 - 例题解析 将 if 和 while 语句翻译成四元式 注:不同教材会有小差异,使用 _ 或者 - ,如果是 -,请注意区分 - ...

  5. 《编译原理》LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析

    <编译原理>LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析 笔记 直接做题是有一些特定步骤,有技巧.但也必须先了解一些基本概念,本篇会通过例题形式解释概念,会容易理解和记忆,以 ...

  6. 《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析

    <编译原理>求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析 算符优先关系表的构造中涉及到求 FIRSTVT 集和 LASTVT 集. 表示及含义: FIRSTVT(T) 非 ...

  7. 《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析

    <编译原理>构造与正规式 (0|1)*01 等价的 DFA - 例题解析 解题步骤: NFA 状态转换图 子集法 DFA 的状态转换矩阵 DFA 的状态转图 解: 已给正规式:(0|1)* ...

  8. Lucas(卢卡斯)定理模板&&例题解析([SHOI2015]超能粒子炮·改)

    Lucas定理 先上结论: 当p为素数: \(\binom{ N }{M} \equiv \binom{ N/p }{M/p}*\binom{ N mod p }{M mod p} (mod p)\) ...

  9. [Reprint]C++普通函数指针与成员函数指针实例解析

    这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下   C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...

随机推荐

  1. 基于“泵”的TCP通讯(接上篇)

    基于“泵”的TCP通讯(接上篇) 上一篇博客中说了基于“泵”的UDP通讯,附上了一个Demo,模拟飞鸽传书的功能,功能不太完善,主要是为了说明“泵”在编程中的应用.本篇文章我再附上一个关于TCP通讯的 ...

  2. Android: Type Method 'NewStringUTF' could not be resolved

      编译一个最简单的Android NDK 例子(android-ndk-r8/samples/hello-jni)出现了错误信息:Type Method 'NewStringUTF' could n ...

  3. DDNS client on a Linux machine

    Using this tool -> inadyn apt-get install inadyn -y Usage: https://github.com/troglobit/inadyn#ex ...

  4. PostgreSQL 简明使用说明

    原文地址:http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html 期间,作者有写错的地方,已经做更改了. ...

  5. Arduino 不同Arduino衍生板子的问题

    arduino IDE装上的时候,要记得在windows平台安装驱动. 如果不安装驱动的话,烧写程序的时候也许会遇到下面的现象. 原因有如下几种: 1,arduino控制板或者COM口没有选对,这种问 ...

  6. ARM linux解析之压缩内核zImage的启动过程

    ARM linux解析之压缩内核zImage的启动过程 semilog@163.com 首先,我们要知道在zImage的生成过程中,是把arch/arm/boot/compressed/head.s  ...

  7. [设计模式-创建型]工厂方法(Factory Method)

    概括 名称 Factory Method 结构 动机 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性 当一个类不知道它所必 ...

  8. 记一次修复被篡改的IE首页

    今天开电脑,打开IE发现首页被篡改为http://www.you2000.cn/,下意识是恶意插件造成的,可是为什么金山卫士没发现呢(我电脑上只装了一个金山卫士)?我锁定首页的啊... 只好手动运行金 ...

  9. Web API 2中的Action Results

    [译]Action Results in Web API 2 单击此处查看原文 本文阐述了ASP.NET Web API是如何将controller action的返回值转换为HTTP respons ...

  10. 前两篇转载别人的精彩文章,自己也总结一下python split的用法吧!

    前言:前两篇转载别人的精彩文章,自己也总结一下吧! 最近又开始用起py,是为什么呢? 自己要做一个文本相似度匹配程序,大致思路就是两个文档,一个是试题,一个是材料,我将试题按每题分割出来,再将每题的内 ...