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

 更新时间:2014年11月03日 10:10:37   作者:笨木头  
这篇文章主要介绍了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.结束了

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

相关文章

  • 解析C++浮点数无效值的定义与无效值判定的小结

    解析C++浮点数无效值的定义与无效值判定的小结

    本篇文章是对C++中浮点数无效值的定义与无效值的判定进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 详解C++ 动态库导出函数名乱码及解决

    详解C++ 动态库导出函数名乱码及解决

    这篇文章主要介绍了C++ 动态库导出函数名乱码及解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • C++输入空格字符串的三种解决方法

    C++输入空格字符串的三种解决方法

    字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结,本文给大家详细介绍了C++输入空格字符串的三种解决方法,需要的朋友可以参考下
    2025-04-04
  • 基于C++实现TCP聊天室功能

    基于C++实现TCP聊天室功能

    这篇文章主要为大家详细介绍了基于C++实现TCP聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++实现LeetCode(18.四数之和)

    C++实现LeetCode(18.四数之和)

    这篇文章主要介绍了C++实现LeetCode(18.四数之和),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • c语言如何输出一个n行m列的图形

    c语言如何输出一个n行m列的图形

    这篇文章主要介绍了c语言如何输出一个n行m列的图形问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • EasyC++编写头文件

    EasyC++编写头文件

    这篇文章主要介绍了C++编写头文件,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码,感兴趣的小伙伴一起来看下面文章的详细介绍吧
    2021-12-12
  • C++算法实现leetcode 1252奇数值单元格数目

    C++算法实现leetcode 1252奇数值单元格数目

    这篇文章为大家主要介绍了C++实现leetcode 1252奇数值单元格的数目题解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • C++堆栈类模板实现代码

    C++堆栈类模板实现代码

    这篇文章主要为大家详细介绍了C++堆栈类模板的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • C++实现页面的缓冲区管理器

    C++实现页面的缓冲区管理器

    这篇文章主要介绍了C++实现页面的缓冲区管理器,文章围绕主题展开详细的内容介绍具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论