Thinking in C++ 阅读笔记(第三章)

来源:互联网 发布:淘宝免费课程视频 编辑:程序博客网 时间:2024/04/30 08:25
C++中的C

<创建函数>

函数原型

eg. int func(in,float,long Z);   //long Z will be warned !

     int func( ) //无参数而不是任意参数

     float func (...)//可变参数列表,避免(?)

返回值

    1、每个函数都有返回值,空返回值为void

    2、return的结果视返回值而定:

    考虑:          

 

    int func(){

      return 1;            

     }

//----------------------------------

      char func(){

      return 1;            

     }

    3、void不能使用return

 

    int func(){

      return 1;            

     }

//----------------------------------

      char func(){

      return 1;            

     }

    3、void不能使用return

 

  函数库

 使用方法:包含头文件

<执行控制语句>: 我最先接触的部分:)

  //...略...//

  注意:

    1、可以随时定义变量;

     2、goto:

         goto跳出多重循环,可读性高;

    当然把循环写成函数再return也行,每层循环加条件也行;

递归:等写算法笔记时再写

<运算符简介>

运算符优先级:查表吧!

自增自减

       1、效率

            ++i //无临时变量

          i++ //临时变量

      2、运算顺序

  consider:

  i=1;

  y=i++ //y=1,i=2

        or y=++i //y=2,i=2

  请参考:http://community.csdn.net/Expert/topic/3688/3688400.xml?temp=.260235

数据类型:内部类型、抽象类型(自定义的类)

      基本内部类型:只规定存储临界值,二进制及其转换为数位;6e-4

      bool:隐式转换??

      说明符:specifier

     long / short 值上下限 float 4 double 8 long double 10

  修饰int可以不写int: long a 就是 long int a

      signed / unsigned 是否使用符号位

      由此可见,long short不可以修饰char,因为char只有一位,而signed unsigned以修饰浮点类型因为浮点类型总含有一个符号。

指针:终于到你了! :)

* 和谁更亲密?

  定义一个变量ptr来存储地址,怎么做到?

  int* ptr=&a

  我们实际上想要得是ptr=&a,但是没有一个基本内部类型可以读取&a这样的数据,所以插入一个*来表示指针,那么*和谁结合更密切呢?

  考虑两种说法:

        1、int* ptr //与类型更密切

    2、int *ptr//与变量更密切

  但是他们都有自己的难处:

  1、int a,b,c可行,按照这种逻辑int* a,b,c也是可行的,但实际上我们不得不写成

           int* a;

           int* b;

           int * c;

       2、 int *ptr=&a 这又好像在说 *ptr=&a,而这并不是我们所要的

      Eckel给我们了一个新答案:*是插入的,和前后没有亲疏关系,只是一个标志告诉编:“ 等一等,它是一个指针。”

用途:修改外部对象;一些编程技巧

修改外部对象

        为什么可以修改?我们可以先看看定义并初始化一个变量时发生的事情,这样有助于理解值传 递和地址传递 。要记住三个名词:名称(访问标识),值,内存地址。值储存在内存地址中,而名称只是访问该地址从而获得值的访问标识,可以认为值和地址结合更紧密,是一一对应的,而访问标识则可以有多个,我们看个例子:

e.g : int a=23; //第一个标识a 以及唯一值23

           假设&a=4198736 //唯一地址,已经转换为long型

           int* ptr=&a; //第二个标识*ptr

      为什么第二个标识不是ptr呢?因为ptr的值是内存地址,把ptr做*运算就可以得到访问内

存4198736的第二个标识了,它相当于第一个标识a。所以从功能上讲,

           *ptr与a一样 //两个访问标识

           ptr与&a一样 //这里复杂一些,ptr实际上是一个新的名称,它对应另一个的值

                               //、内存地址。看完下面程序就明白了:

           void main(){
             int a;
             int*ptrA=&a;
             cout<<(long)ptrA<<endl;
             cout<<(long)&ptrA<<endl;
             }

引用简介

      “(引用)基本思想和前面所述的指针的使用是一样的:我们可以用引用传递参数地址。引用和指针的不同之处在于,带引用的函数调用比带指针的函数调用在语法构成上更清晰(在某种情况下,使用引用实质上的确只是语法上否成的不同)”说白了

int&a=b;

就是为建立了别名a,而&则表示“等一等,它是一个引用”,还是用名称,值,地址关系来看,我们可以这样看:

int b=1;

int&a=b;

名称:b,a   值:1   地址:&a或&b(&a=&b,这是b是a的别名的最好证据)

用引用在语法上更清晰,更符合人的思维。

更多细节,请参看:

http://dev.csdn.net/develop/article/62/62577.shtm   C++ FAQ阅读笔记[2]--引用

选择自 oury 的 Blog

http://dev.csdn.net/develop/article/57/57367.shtm   C++基本功:从一个左右值问题出发,侃侃C++的引用

选择自 shooow 的 Blog

 

    int func(){

      return 1;            

     }

//----------------------------------

      char func(){

      return 1;            

     }

    3、void不能使用return

原创粉丝点击