C++primer学习笔记(四)——Chapter 6

6.1  Function Basics

一、函数的构造

type functionName( parameters list)
      statement

1、首先格式如上,一个函数一定要有返回值的类型type,函数名functionName,还有括号内的参数列表,以及主要的函数的内容。

2、返回值:

(1)就是return,首先,return的值一般要和返回值类型相同,否则就转换成返回值类型,但是如果没有转换的方法就会出错。

(2)return的作用主要是两个,一个就是结束函数,回到调用的地方,另外一个就是然会一个值。

(3)返回值类型可以是void,那么return就只有结束函数的作用了~

3、参数列表

(1)一个参数一定要跟着一个类型,不可以有例外。

(2)参数的名字不可以相同,函数内的名字也不可以和参数列表内的相同

4、调用

        切记调用的时候使用的参数类型要与参数列表一一对应。

二、Local Object

1、local variables:

         这个很好理解,就是定义的变量,如果在{}内,那它的作用域就只在这个{}的范围内。

2、全局变量

         就是在函数外定义的,那么,这个变量就可以在它定义之后的任何一处代码中使用

3、Local static objects

        这种变量不会随着{}的结束而结束,它存在于整个程序的生命周期,然后这种变量的定义和初始化语句只执行一次。

6.2   Argument Passing

一、传参数的方法

重点就是传参数的2种方法

void  func(int i)
{

}

1、就是这种简单的方法。此种方法是通过复制一遍的方法来创建一个新的参数i。注意点就是

(1)不能通过改变i来改变原有的值。

(2)在对大的类或者参数进行拷贝的时候是很浪费时间的。

(3)对于指针的复制,因为同样指向同一个对象,所以可以通过指针来改变他的值。

void  func2(int &i)
{
}

2、通过这样引用的方法,就会将i和传入的变量绑定在一起,可以直接改变他的值。

PS:一般用引用的方法来替代copy,然后应该如果为了防止不小心被改变,则应该加上const就OK。

二、Array  Parameters

       主要有2种方法引用,一种是指针,另一种是引用

1、指针的三种用法(确定长度)

(1)

void print(const char *cp)
{
     if(cp)         //就是判断是否是空指针
          ……
}

PS:

     const char *p; 常量指针,指向一块区域,这块区域不可写,只能读。
char * const p; 指针常量,指向一块区域,这块区域可读可写,但是指针的值初始后就不能改,
                     类似于一般常量。

(2)

void print(const int*beg,const int *end)
{
      while(beg!=end)
    {
          cout<<*beg++<<endl;
    }
}

       这里就是使用的库函数,使用begin()获得头指针,end()来获得尾指针。

(3)

void print(const int ia[],size_t size)
{
       for(size_t  i=0;i!=size;++i)
      {
           cout<<ia[i]<<endl;
      }
}

      这里就是手动的定位长度,自己再传入一个变量这样子。

2、引用的方法。

void print(int (&arr)[10])
{
       for(auto elem:arr)
            cout<<elem<<endl;
}

      由于优先级的问题,在传入指针数组的时候,需要加上一个括号,保证是传入的是这10元素的头指针。

3、附加多维指针的方法,就是说,当恒数组的数组,所以要保证列是已知的,然后按上面的方法确定行数。