看了挺长一段时间的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. js操作iframe总结

    一 在父页面操作子页面   IE下操作IFrame内容的代码: document.frames["MyIFrame"].document.getElementById(" ...

  2. IOS使用不同父类的 view 进行约束

    最终效果图如下: 很多限制条件都已经应用到了视图中,我们在解释一下: ·在我们的视图控制器的主视图中有两个灰色的视图.两个视图距视图控制器的视图左 边和右边都有一个标准的空白距离.视图的顶部距顶部的视 ...

  3. inet_aton()

    两次技术面试都被让c语言实现inet_aton()函数 看来这个函数真的很重要. 我先贴上我自己的实现代码 #include <stdio.h> #include <math.h&g ...

  4. C#利用Emit反射实现AOP,以及平台化框架封装思路

    C#利用Emit反射实现AOP,以及平台化框架封装思路 这是前两天扒的一段动态代理AOP代码,用的Emit反射生成子类来实现代理模式,在这里做个小笔记,然后讨论一下AOP框架的实现思路. 首先是主函数 ...

  5. C# IE代理操作

    public class IPProxy { [System.Runtime.InteropServices.DllImport("wininet.dll", SetLastErr ...

  6. iOS网络通信http之NSURLConnection

    iOS网络通信http之NSURLConnection 移动互联网时代,网络通信已是手机终端必不可少的功能.我们的应用中也必不可少的使用了网络通信,增强客户端与服务器交互.这一篇提供了使用NSURLC ...

  7. SVM学习资料

    SVM学习资料 2013-06-21 17:29 by 夜与周公, 227 阅读, 0 评论, 收藏, 编辑 SVM(support vector machine),被认为是“off-the-shel ...

  8. 详解android的号码匹配

    什么是号码匹配,个人理解,即判断两组号码是否属于同一个号码.在实际使用过程中,接触到的号码会涉及到区号,国家编码以及IP号码等,这个时候就用到了号码匹配.两个内容不一样的号码,如+86***和1795 ...

  9. VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机

    VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...

  10. 横瓜先生关于如何利用MYSQL数据库设计CMS系统处理100亿级TB规模的数据量

    遥执乾坤(44758121)  18:21:23 mysql据说只能使用一个索引,我这里几乎所有字段都有索引. 但每个字段就算用索引,也需要扫描至少100w以上记录. 横瓜(601069289)  1 ...