码迷,mamicode.com
首页 > 编程语言 > 详细

学习C/C++语言的感悟(1)——最主要的是解决最初的别扭感

时间:2015-07-29 00:47:01      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

  学C 感悟最深的是为何要如此去规定,为何要如此去写,为何要如此去用。

    ( # include <>或者是include“” )include 是包含的意思,包含哪个库文件。如果将C语言比作军队,库应该为某一支特殊的军队,专门从事某件事物,比如工程兵,遇山开路,遇水搭桥。C语言中如果需要输入输出( printf(),scanf() ),就要使用(#include  <stdio.h> )头文件。不然程序就不支持。军队如果没有工程兵,那么遇到工程兵做的事他就只能征调民夫或者军队自己干,这样效率当然比不上专门的工程兵了。而C语言中也是一样,自己不使用(#include  <stdio.h> )头文件也可以啊,自己写啊,但是效率低下。

  (  int main()  ) 是主函数入口,程序从这开始,从这结束。比如军队需要某一支部队做主力作战部队,开头猛打,陷阵摧锋,最后一击,定局取胜。C/C++语言为何如此规定了,如果不这样规定的话,开头怎么写,有些人就会丈二和尚摸不着头脑,不会下手;而且程序的思维逻辑性就不好理清。并且一个约定俗成的规矩是好事,军队需要军法十七禁律五十四斩一样。如果我们不这样写的话,程序就不会支持,编译不会通过。在军队中,犯军法,后果很严重,犯禁律会被砍头枪毙一样,人死了,怎么玩,咱又不是刑天那么牛。

  (int  a = 0 ; ) 程序是先定义声明后使用,不然程序不支持,为何?设计的时候这样规定的。如果不定义的话,谁知道它是谁啊。当然我们可以在定义的时候初始化,也就是赋值。做个比喻,就是军队之中有多少支部队或者说是编制。在古代一般是十人一什,五人为伍,你是属于哪个哪个伍的,或者是哪个什的(有可能只有什哦,不要钻牛角尖)。定义就是将你编入哪一个伍或者什,用你去打仗的时候调用某某伍某某什就可以了吧,赋值也可以这样说你这个伍中或者什中有多少人。(int  a = 0 ; ) ,为什么要说是将a赋值为 0 ,而不是等于 0 了?打个比方,如果某一支军队实际有10000人,打仗了, 死了4000人。那么他的人数是不是变为6000。那这个时候该怎么改?等于,好,那就等于,某支军队人数等于6000人。如果是6000人的话,继续战斗;5000人撤退。那这怎么玩了?某支军队人数( a )等于6000人,还是战斗(  if(a=6000)  ),等于5000人撤退(  if( a  = 5000 ) ),这不对啊,他到底是该撤退了,还是该继续战斗了。所以 == 就出来了。

  (int  short  long   double  float  等等),各个数据类型各有用处,也各有各的局限,使用时需要注意。编译的时候不超过界限还好,超过出大事。打仗打胜了还好,打败了,呵呵。为何要如此规定了?电脑的内存空间是有限的,虽然现在内存大了很多,但是该知道的还是要知道。军队中使用某一支部队,需要做一些小事,不惊动敌人,就要精简部队,挑选精锐吧。做声扬之事的时候,筛进去一些普通部队可以壮大声势,虽然降低战斗力。好比C语言中多使用内存造成可用内存减少的后果(虽然有点小)。

     (  for (int  count = 1;  count <= 100;  count++) )  这是一个 for 循环,可以算出从 1 加到 100 。如果是 int  100 个变量,然后再将这100 个变量加起来,这样是不是很傻?所以设计中有 for 循环。这个语句先是在 for 循环里面定义一个 count 的局部变量,当(count <= 100),执行for循环里面的语句,执行之后(count++;)。然后再判断count是否小于等于 100 ,是再次(count++;)。这是循环,当条件(count <= 100;)不成立的时候,跳出for  循环。用军队打仗比喻的话,打不破这个缺口,我就一次一次投入多少多少兵力,直到将自己填入这个绞肉机,这是不成功便成仁。这个是不是瞬间感觉不好了。嗯,我也这样认为。

现在小孩子一般不听话,大人一般就是竹笋炒肉。打个比喻哦,别说虐待小朋友。

 

  ( if (小孩子不听话  ==  true)

     {

      竹笋炒肉();

    }  )  if 语句只判断一次,也就说只有起到一次的教育效果。如果他还是不听话了,那么又要竹笋炒肉。但是 if 不行。当然还有一种比喻,这是突击检查,检查,嗯嗯,你懂得。军队打仗的话,就是打瀛洲,你不听话,上蹿下跳,打的就是你。但是,你还叫嚣,怎么办?那么就要使用while 了。

 

  ( while  (小孩子不听话  ==  true)

   {

      竹笋炒肉();

      控制循环语句;

   }  )这个while 语句是一直执行,不听话就一直竹笋炒肉,等小孩子听话的时候就停止竹笋炒肉。另外一种比喻是一种守着你,专门盯着你。打瀛洲就是一直打到你听话,才不打你了。

 

  (  do{

      竹笋炒肉();

      控制循环语句;

          }while(小孩子不听话  ==  true);)  do …… while  循环是先竹笋炒肉,再来看看小孩子是否听不听话。这种办法不好不可取,不管怎样,至少要竹笋炒肉一次,(这放在谁身上都不好受吧)不听话,再进行一次竹笋炒肉。这个最是暴力,建议不要选择这种。  这个对付瀛洲最爽了最YY了,不管咋样,先揍一顿再说。但是需要针对某一个不听话的,怎么办? C 语言设计出另外一个东东,switch 就派上了用场。

     

  (  switch (几号不听话)

    {

           case 1:

                      打几号;

                      break;

           case 2:

                      ……

    }    )使用这个需要注意使用 break 语句结束,不然单挑变成1 挑 N ,开无双,最有可能的是群殴。军队打仗的话,就是哪个东西不听话,就打哪个东西。

使用switch 语句还有一个技巧,比如是一个骰子,点数的大小,123为小,456为大。

  ( switch (骰子大小)

       {

       case 1:

       case 2:

       case 3:

                     printf(“小\n”);

                     break;

       case 4:

       case 5:

       case 6:

                     printf(“大\n”);

                     break;

       default :

              break;

    }     ) 这是使用一 break 的一个技巧,骰子大小数是 123,他会执行( case 1:  case 2:   case 3: )语句之后, 然后再执行 printf() 语句,最后( break ;),跳出switch 。至于( default : ) 是骰子大小不符合各个(case :)  分支语句,跳出switch。这个是以防万一,写switch 语句的时候建议加上 (default :) 分支语句。

  但是,如果想保存很多个学生的姓名,年龄,学号,班级,等等信息,是不是有点麻烦。所以C/C++ 语言中有用户自定义数据类型。

  C语言中还有自定义数据类型,比如struct 结构体,union联合体(又称共用体) ,enum 枚举类型。

  结构体可以包含很多数据类型,有int ,double,指针,数组等等。可以将比做军队之中有很多兵种,有坦克兵,有飞行员,有炮兵,有纯步兵等等。纯步兵很难打得赢吧,赢了也是打得很苦逼。像某些YY小说,长枪阵排队刺杀天下无敌,这是不可能的,古代那么多战争有几场战役纯靠某一个兵种取胜的了?兵种集合起来战斗力就很强大,编写代码的时候需要将一些不同的数据类型集合成一块,那么用起来是不是很轻松,并且思维也很清晰。

  结构体虽好,但是占用内存空间有点大,而且某些数据不想用的时候可不可以消失,不占用内存。那么C语言搞出来的联合体就是解决此问题。

  同一数据类型的时候,不想多写数据类型怎么办了?C语言设计中枚举就可以办事了,它可以轻而易举的将扑克牌的A——K 赋值为 1 —— 13,而不并写什么int 什么什么滴。

  函数:为了实现某一个功能,自己写了很多遍,不想写这么多遍怎么办呢?调用函数!自己写一个函数实现某一个功能,在主函数中然后再去调用它,只一行是不是很简洁。比如军队之中专门建立一支特种部队,用于斩首。当战争爆发时,需要将敌军指挥部端掉,是不是只需要下一个命令,指挥特种部队去干这件事啊。然后当下一次战争时,也只需要一个命令啊(函数调用)。而不必要每一次战争都要自己去建立一支特种部队,战后解散,战前又一次建立吧。

  数组:如果在程序中如何存储和处理具有N个整数的数列呢?比如扑克牌的数字大小(大小王不算),用枚举可以解决,很简单,13个,搞定。如果要处理100个1千个1万个呢。用int 变量表达这么多的数,额——,当我没说。数组可以解决吗。它可以连续存储N个数据,用一个下标就可以访问所需要的数据。比如军队打靶,事先分配你是第几号,然后找到你的几号靶子,读出几环,记录数据。下一次想知道你的成绩的话,找到你是第几号就知道你的成绩了吧。

  指针:( int  cabinet = 100 ; int  *p = &cabinet ; ) 去超市买东西的时候,一般事先会把手上的东西( 比如100元RMB )放进储物柜,服务员会给你一个号码牌(int  *p = &cabinet ;),柜子cabinet 中放着东西,而指针 p 了就是那个号码牌,可以凭借那个号码牌牌号找到那个柜子,也就是 &cabinet 。找到柜子之后就可以凭借号码牌( *p )取得那 100 元。再换一个理解就是你住的地方是哪条街第几栋第几楼,这是地址,地址里面存放的是你这个人,而我要找你的话就可以凭借你的地址直接找到你了。为什么使用指针了?一般变量就是我从另外一个人知道你的姓名,然后再去找你。但是我知道你住哪,我直接找你就可以啦。指针可以直接操控内存,比一般变量效率更高一点。

  汇编语言中随便怎么写都可以,但是一旦将一个东西修改了,就可能造成死机或者其他的严重后果,是不是有问题?如果不准使用的话是不是又一棒子打死啊。所以C/C++中,就出了个指针的东西。

  如果调用的函数中需要修改好几个值,而函数返回只有一个值是不是没办法解决?怎么办?凉拌?指针直接使用地址访问内存,修改地址里面的值就可以啰。注意,地址不变,只是地址里面的值变了。比如,小明吃了苹果,香蕉,西瓜,人没有变,只不过是肚子之中的东西变了。

  其实,学了C语言之后,换个角度想问题,站在解决问题,开发者的角度想问题,就会知道C语言其实这样规定是何道理。而自己理解起来就不会别扭了(当然,缺心眼的当我没说)。用起来也就顺手了,因为知道它的本质了,干起事来心里就有底了。

 

学习C/C++语言的感悟(1)——最主要的是解决最初的别扭感

标签:

原文地址:http://www.cnblogs.com/huangyuye/p/4684621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!