危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览19378891

危险漫步带你详解C++

大家好,我们上一章中介绍了如何新建一个项目,本章我们来学习一些基本的语法,让计算机来做一些简单的事情。上一章中,我们可能很多代码大家都不知道是什么意思,没关系,我们目前没必要知道,理解为规定即可。那么现在我们来学习在控制台下面如何让计算机输出一句话。什么?不知道什么是控制台?哎呀,你悲剧了,好好补补基础去吧。在程序中,我们要在控制台输出很简单只要用printf来输出即可。但是,我们说既然是语言,我们肯定就要说明遵循一定的语法,不然计算机看不懂写了也白搭。首先,第一条大家要知道的,每

一条语句都要用";"来结束,这个是最基本的,就和我们写作文要用句号结束一样。ok,这是第一个要明白的。那么现在我们是要让计算机输出我们自己指定的一句话:那么我们就要想办法告诉计算机我们要它干什么,根据语法,我们得这样来写:

“printf(”我们要输出的东西“);”,那么打开我们的源代码试试呗…大家可能会发现界面依然是一闪就过了,这个很头疼吧?其实并不是我们代码写错,而是计算机确实执行了输出,但是输出完了以后,一看,retttrn 0;,OK,程序结束,所以闪一下就过了,那么这个我们应该怎么解决呢?大家当然想到.很简单,让计算机等下呗。我们最简单的处理办法就是让计算机等待我们输入,具体怎么实现,我们其实只要写一个"scanf("");"就可以了。什么?程序出来一黑框啥都没有?那肯定是你的scanf放到printf前面去了呗。好了,讲了这么凡行代码,我估计大家是一行都看不懂,没关系,现在没必要看懂,只要知道怎么写就OK。那么要学习编程,我们自然要接触到一个概念,那就是变量。这个是所有教程最害怕涉及的话题。讲的人难讲,学的人难学,在写这篇稿子的时候我已经反复写了近3000字,写了又删,删了又写,始终不能找到一个好的能方便大家理解的描述方式。但是这还又偏偏不能不讲,这就是很纠结的一个话题,我呢,干脆从难的讲起,虽然大家更难懂,但是起码以后理解会深一点,现在我们先不说变量,先说一下内存这东西。内存是一个电子设备,由无数电路构成,一个电路的开与合,我们视为0和1,这样一个电路就能表示两个数字,两个电路呢?组合起来总共四种情况,分别是00,01,10,11视为二进制的话,就分别对应0,1,2,3四

个数字:如果是三个电路就有8种情况,000,001,010,011,100,101,110,111,分别对应0-7八个数字,那么这就是我们的内存的情况。内存就是这样来存放我们的数据的,所以我才说,计算机其实只认得二进制数据。好,现在这种情况我们可以知遭,只要内存够大,那么我们能够用二进制来表示0-无限大这样一个范围。但是如果我们想表示一个负数呢?想表示一个字母呢?在二进制下面就难以表示了呀?而且我们计算机内存有大有小,天知道用户的内存有多大?能存放多大的数字?如果要存放N个数字怎么办?我们会发现一连串的问题。那么现在我们来看下这些问题怎么解决哈。各个用户电脑都不一样,内存有大有小,我们不可能为每一个用户编制一套单独的程序,所以我们就要有一个公共的约定。这个约定操作系统已经帮我们制定好了。我们把一个二进制位称之为1个节点。而8个节点构成一个字节。(不要问为什么,规定规定)。大家可以算一下,一个字节最大可以存放多大的数值,这个值其实就是二进制的11111111,也就是十进制的255。我们在现实生活中,不仅仅有整数这种数据呀。字母也是一种数据,还有诸如小数之类的,但是要如何用二进制来表示小数?表示字母昵?对于字母,我们采用了编码来解决,我们给每一个字符编一个对应的数字,这样我们可以成功的用二进制来表示字符,但是小数和负数怎么办?小数,大家

不用去了解,负数,如果我们用一个节点来存放符号会怎么样呢?比如说,一个字节的空间有8个节点,第一个节点用来表示符号,其他的来表示具体数值。但是,始终,这样能表示的内容还是少了,我们平时可能会用到几千几万的数值,这么几百怎么够用昵?所以就必须扩容。为了统一,我们一般把整数的空间设为4个字节,也就是用32个节点来表示一个整数。这样除去一个符号位,我们还有3 1个节点可以表示我们的数值。所以就有了我们第一个数据类型:整型。整型对应着我们日常生活中的整数,在C++中,我们用int来表示整形数据。那么大家不妨算一下,一个整型数据可以存放哪个区间的整数呢?没错,就是-2147483648~2147483647,什么,为什么正数部分个位是7而不是8 7魂淡,还有0啊!好了,那么整数是这么在内存中存放,那么以此类推,将字母的编码也可以用同样的方式来存储。只是因为所需要的大小不一样,我们给各种类型分配不同的大小以节省内存。这里我就不一一列举存储方式啦,这里我就直接说一下现有的几种最基本的数据类型:

1.整型(用于存放整数):int,4字节

2.浮点型(用于存放小数):double,4字节

3.字符型(用于存放ANSI字符):char,l字节

4.字符型(用于存放UNICODE字符):wchar,2字节

上面就是我们最常用的几种数据类型了。其他的还有很多,我们后面用到了再讲。字符型为何要两种,ANSI编码是一个字符1个字节,只能用于表示英文字符,现在改进之后可以用两个字节来存放中文。UNICODE编码是不管中文还是英文字符,都占用两个字节的内存。这一章写得很是难受,确实基础很难讲。

说到这里,大家可能不知道,怎么在内存当中存放一个数据。我们总不至于自己去考虑节点,然后一个一个去操作节点吧?那程序员不得累死,所以在我们开发过程中,内存的最小单位不是节点,是字节(当然,如果非要操作节点,也不是不行,我们后面会学到位运算)。在C++中,很多东西不用我们自己去考虑,比如说我们现在要分配一块内存空间来存放一个整数,我们只要定义一个变量就可以了。至于什么是变量,如何定义,我们慢慢说。在一个程序中,我们可能有很多很多的数据需要存放在内存中,一个数据存放到内存中之后,我们如

果要修改怎么办?如果直接去动内存,可能不太安全,万一改错了地方怎么办呢?所以我们引入变量这个概念。其实怎‘么说呢,变量可以理解为一块内存空间所对应的代号。我们通过这个代号可以直接访问到内存,而不用担心改错地方之类的。至于变量的定义,很简单,大家都看到我上面的说明后面都带着几个英文,这几个英文是在C++里面固定了的,我们称之为关键字,通过这几个关键字,我们就可以定义变量了,语法如下:

类型关键字变量名;

这是定义一个变量的最基本语法,定义之后,操作系统就会自动找到一块没有使用的内存来给我们的程序,而通过变量名这个代号,我们可以很轻松地操作这块内存。那么变量名是不是叫什么都可以呢?也不是,既然是语言,那么就肯定有一个规则,变量名的规则就是,可以以$、或者字母开头,可以包含字母,数字以及下划线。这个规则说起来有点绕,举个例子来说,$q123,_q123,q123k都是有效的变量名。而lq23,这就是不允许的,变量名不能以数字开头,这个是个规定。关于变量这块,我们学会了定义,还没学怎么用。我们假设要在变量中存放个值,应该怎么做呢?说到这里,我们就要学习c++入门以来的第一个运算符,赋值运算符。赋值运算符就是我们很常见的一个符号:“=”,注意在程序中,这个符号已经不是我们数学中等于这个概念了。而是把赋值号右边的值存人左边的变量中,也就是说,在赋值号左边,只能放置变量,而右边,可以是变量或者是常量。估计大家又看到陌生词了,常量。常量是什么,就是无法改变的数据我们就称之为常量了。现在我们来定义一个叫做

hack的整型变量,并且把值设为100,看看代码:

int hackx;

hackx=100;

这就是我们的代码,很简单吧,第一句,定义,第二句,赋值。但是大家可能想说,这么简单的一个事情,还得写两句代码,很烦呀。那也可以,我们可以在定义的同时来进行赋值,代码可以简化成这样:

int hackx=100;

怎么样?容易吧?什么?这么简单的一个操作还要写一句代码?靠,那你干脆别学程序了,那你可以一句代码都不写。好了,关于变量这块我就说到这里吧,这篇文章是危险漫步有史以来,写过的最伤脑筋的文章了,有点短,有点嗦,有点晦涩,大家请谅解。不过大家应该基础都不会太差,我想不能理解的应该占少数,如果有人不理解什么地方,欢迎大家到危险漫步博客咨询。文中有的定义是为了让初级读者更好理解而稍作改动,并不一定完全准确,希望基础不错的朋友不要钻牛角尖哈。好了,本月的走进C++系列就到这里,谢谢大家对危险漫步的支持。