C++基础入门教程(四):枚举和指针

我已经把《C++ Primer》一书准备好了,如果这本《C++ Primer Plus》继续这么瞎闹的话,我就换主角~!

没错,这书连if while都还没介绍呢,就开始把指针搬出来了,虽然只是简单介绍..
这目录编排我也是醒了。

那么,按照书上的进度,今天来初步说说指针。
但,今天周五,你懂的,就随便水一下,因为我怕到周一又忘了。

1.枚举

那么,枚举是什么呢?(小若:等等~!说好的指针呢?)
大部分高级语言里应该都有枚举了,所以也没什么好介绍的。
使用是这样的:

代码如下:

// 定义
enum MonsterType {
   enMonster_nor,
   enMonster_hard,
}
// 声明一个枚举变量
MonsterType mType;
// 使用
if(mType == enMonster_nor) {
   log("去死吧~!");
}
else if(type == enMonster_hard) {
   log("哦呵呵,您好,这是我这个月的薪水,都给您了哦,我最崇拜您了,您是我这辈子最....(1万字省略)");
}

2.什么是指针

因为这不是真正的C++教程,只是补充而已,所以基础概念我就不说。
指针就是能够指向内存空间的东西,没错,它只是指向内存空间,它本身不是内存空间。
 
好了,不唠叨。

3.声明指针

声明指针变量是很简单的事情,如下代码:

代码如下:

int num = 10;
int *p = #

没错,即使是我们以前的普通变量也是有内存地址的,使用&符号就能取得它的内容地址。
然后,我们的指针变量p就是专门用来存放内存地址的。
在声明变量的时候,加上*号就代码这是指针变量。

记住,这是声明~接下来如果没学过指针的,就会混乱了。

4.使用指针

指针要怎么使用呢?很简单,如下代码:

代码如下:

int num = 10;
    int *p = #
    *p = 20;
    std::cout << *p << "\n";
    std::cout << num << "\n";

最后,*p和num都是20。
p是指针变量,它保存了num变量的内存地址。
而*p就是这个内存地址上面的值,也就是我们的变量num的值了。
于是,*p = 20 就代表把这个内存地址上的值改为20。

重点来了:

1.假设num的内存地址0xffffff,这个地址上的存储的内容是数字10
2.p是一个指针,它保存了num的内存地址,所以p的值是0xffffff,这个地址上的存储的内容是数字10
3.*p代表是p指向的那个内存地址上面所存储的内容,也就是数字10,换句话说,*p的值是10
4.指向*p = 20,相当于把p指向的内存地址上面的内容改为20
5.由于num的内存地址就是p指向的地址,所以num在内存中保存的值已经改变了
6.最终num的值也会变成20

明白了么?(小若:用中文再说一遍)
嗯,用中文再说一遍的话,那就是:

因为p指向的内存地址就是num所在的内存地址,所以通过num和*p都能改变这个地址上的内容。
一句话,此刻*p相当于num,可以进行各种操作(赋值、加减法等等)
(小若:早点说中文多好啊!非得显摆你那半调子日语吗?!)

5.指针外传

有时候,我们可以这样声明指针:

代码如下:

int *num;
// 但你千万不能这么使用
*num = 100;

咋一看,这么使用好像很正常,和刚刚说的一样。
但,请注意,指针num在声明的时候并没有赋值,也就是说,这个指针现在不知道是指向哪里的。
所以,随便使用这样一个不知道是指向哪的指针,很可能会破坏我们的程序。
 
比如吖,我们本来是想声明一个指向我们一根头发的指针,但是,我们没有给它赋值。
于是,这指针就不知道指向哪了,它可能还指向它以前曾经指过的地方。
万一这指针以前指向的地方是我们的腰部以下的部位呢?
 
万一我们用这个指针执行了“剪掉指针所指的地方,全剪了”。
没错,本以为剪的是头发,结果呢!把腰部以下给剪了!
这下半辈子怎么办,就再也不能跑步了(你想哪去了?)

6.结束了

好,今天就水到这里了~下次见

(0)

相关推荐

  • C语言中枚举与指针的实例详解

     C语言中枚举与指针的实例详解 总结一下, 定义枚举,用typedef enum关键字, 比如 typedef enum{Red,Green,Blue} Color3; 枚举到数值的转换,如果没有指定代表数值就是从0开始算, 比如 Color3 c=Red; printf("%d",c);会显示0, 除非指定 如typedef enum{Red=3,Green=5,Blue=10} Color3; 关于类型指针的定义, 定义的时候在变量名左边加*代表此变量只是一个空指针而已, 若需要赋

  • 零基础易语言入门教程(四)之数据类型

    我们一起了解下易语言的数据类型,跟我们现实生活是一样的,分为文本型和数值型,即是我们所说的文科生和理科生的区别. 参考文章:详解易语言中的数据类型 方法和步骤如下所示: 1.数值型(到数值命令): 使用该命令可将文本型等一类数据更改为数值型:我们来输入一行代码看看其作用: 2.到文本()命令: 我们先输入一行代码试试,见下图 3.小结: 每一行代码前后的数据类型必须转换为同一种,方可进行相连,相加,"+"在数据为文本型时是连接作用,数值型的跟数学里的符号一样. 以上所述是小编给大家介绍

  • 一看就懂的ReactJs基础入门教程-精华版

    一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了.由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具. ReactJS官网地址:http://facebook.github.io/re

  • Go语言七篇入门教程四通道及Goroutine

    目录 1. 前言 2. 通道简介 2.1 声明 2.1 读写 2.3 通道详解 2.3.1 例子 2.3.2 死锁 2.3.3 关闭通道 2.3.4 缓冲区 2.3.5 通道的长度和容量 2.3.6 单向通道 2.3.7 Select 2.3.8 default case 块 2.3.9 空 select 2.3.10 Deadlock 2.3.11 nil通道 2.4 多协程协同工作 2.5 WaitGroup 2.5.1 简介 2.5.2工作池 2.5.3 Mutex 3. 结语 如何学习G

  • Mybatis入门教程(四)之mybatis动态sql

    推荐阅读: MyBatis入门学习教程(一)-MyBatis快速入门  什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if, choose, when, otherwise, trim, where, set, foreach标签,可组合成非常灵活的SQL语句,从而提高开发人员的效率. 下面就去感受Mybatis动态SQL

  • Bootstrap零基础入门教程(三)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 写到这里,这篇从零开始学Bootstrap(3)我想写以下几个内容: 1. 基于我对Bootstrap的理解,做一个小小的总结.

  • Bootstrap零基础入门教程(二)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 本文重点给大家介绍Bootstrap零基础入门教程(二),具体详情如下所示: 过程中会频繁查阅资料的网站: http://www.

  • Android 基础入门教程——开发环境搭建

    现在主流的Android开发环境有: Eclipse + ADT + SDK Android Studio + SDK IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的Eclipse,而谷歌宣布不再更新ADT后,并且官网也去掉了集成Android开发环境的Eclipse下载链接,各种现象都表示开发者最后都终将过渡到Android Studio,当然这段过渡时间会很长,但如果你是刚学Android的话建议直接冲Android Studio着手:而且很多优秀的开源项目都是基于

  • MySQL基础入门教程之事务

    目录 引言 1.事务操作 1.1 未控制事务 1.2 控制事务一 1.3 控制事务二 2.事务的四大特性 3.并发事务问题 4.事务隔离级别 总结 引言 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000. 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败. 正常情况: 转账这个操作, 需

  • Leaflet 基础入门教程示例

    目录 什么是Webgis? 什么是Leaflet? 在Vue中安装Leaflet,与其他依赖 在App.vue中使用 初始化地图 chinaProvider地图瓦片 addControls使用工具集 attribution创建自定义版权 Marker创建点 创建线 Polygon创建三角形 Popup弹窗&Tooltip提示 Geojson区域描边 总结 什么是Webgis? webGis又称之为网络地理信息系统,GIS的全名是Geographic Information System,它是在计

  • C++基础入门教程(四):枚举和指针

    我已经把<C++ Primer>一书准备好了,如果这本<C++ Primer Plus>继续这么瞎闹的话,我就换主角~! 没错,这书连if while都还没介绍呢,就开始把指针搬出来了,虽然只是简单介绍.. 这目录编排我也是醒了. 那么,按照书上的进度,今天来初步说说指针. 但,今天周五,你懂的,就随便水一下,因为我怕到周一又忘了. 1.枚举 那么,枚举是什么呢?(小若:等等~!说好的指针呢?) 大部分高级语言里应该都有枚举了,所以也没什么好介绍的. 使用是这样的: 复制代码 代码

随机推荐