看了挺长一段时间的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. Aliexpress API 授权流程整理

    Aliexpress API 授权流程整理   前言 我零零总总用了好几个月的时间,写了一个自用的小程序,从 Aliexpress 上抓取订单的小程序.刚开始写的时候,该API还没有开放,而且没有订单 ...

  2. Sublime Text 3设置笔记

    Sublime Text 3设置笔记 Sublime Text 3设置指南 1. 安装package control 下载package control源码安装包,并解压: http://yun.ba ...

  3. Kemaswill 机器学习 数据挖掘 推荐系统 Ranking SVM 简介

    Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Le ...

  4. SSH使用技巧

    SSH使用技巧 SSH免输入密码 原理是依赖证书去认证,从而免除密码输入. 通过ssh-keygen生成一对公私钥,是否使用passphrase可以根据个人喜好.(其实使用证书就是为了方便而已,我是不 ...

  5. JDBC连接数据库(MySQL)

    package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSe ...

  6. CXF.bat

    @echo off rem ------------------------------------------------------------------- rem CXF Environmen ...

  7. Java8:使用Lambda表达式增强版Comparator排序

    学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌.----jstarseven. 实体类: package com.server.model; /** * Created by js ...

  8. java.lang.ClassNotFoundException: [Ljava.lang.String解决办法

    原来jdk5.0的时候不会报这个错,用了jdk6.0就出现了这个错误,因为没有重载java.lang.String这个类 解决方法: 在vm缺省参数里添加-Dsun.lang.ClassLoader. ...

  9. 微信内嵌H5网页 解决js倒计时失效

    项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算 ...

  10. Android 动态监听网络 断网重连

    需求: 网络连接断开 弹出popupwindow 当前网络连接断开 网络恢复时popupwindow 消失重新请求网络. 需求描述完毕 上一张帅图 思路:广播 发送及时消息 断网flag  popup ...