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

时间:2021-05-20

我已经把《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.结束了

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章