C++学习笔记(二)--基础

1.浮点型数值不管写成什么样 都是以指数形式保存在内存中 数符|数字部分|指数部分 例:+0.33E10 数字部分的整数部分不能大于1,小数点后面不能是0.

2.字符数据是以整数形式保存在内存中的(ASCII码,范围0-255).所以在一定范围内,字符数据与int型可以互用.

3.符号常量 #define salary 50 (编译器将预编译)好处:含义清楚 一改全改

4.字符串类型 "abc" 编译器编译时自动加"\0" 作为结束符,即"abc\0"占4个字节.

5.常变量 const int a = 255 ;在声明时就要赋值,之后不可被更改.

6.i++先使用i再自增1,++i先自增1再使用i.

7.逗号表达式取得是最后一个式子的值,a=b,c=10 值为10 ; max((10,20),a+10) 值为20

8.getchar()输入一个字符, putchar()输出一个字符。注意:是字符,不是字符串.

9.保留了C语言的scanf(),printf(),不过不常用.

10.条件表达式:表达式1?表达式2:表达式3 执行过程:判断表达式1是否成立,成立=>执行表达式2,否则执行表达式3.

11.C语言中while语句,if else语句、for语句、switch case语句等任然适用.

12.函数声明可以在主调函数中,也可以在主调函数外.

13.内嵌(内置)函数,能有效加快函数调用的效率,即在编译时,将调用的函数代码直接嵌入到要调用该函数的地方,而不是再将流程转出去,直接在函数类型前加一个关键字 inline 即可:inline int max(void);调用函数处仍为max(); 小规模函数才使用,含有复杂控制语句,如switch 循环语句等就不适合.

14.函数重载(function overloading):函数同名,一物多用,编译器可以根据实参的类型找到与之匹配的函数,重载要求参数类型或者个数、参数顺序不同,函数体可以相同也可以不相同.
使用函数重载时,同名函数的功能尽力相似。
#include<iostream>
using namespace std;

int main(){

  int max( int a, int b, int c );
  int max( int a, int b );

  int a=8, b=-12, c=27;
  cout <<"max( a,b,c )=" <<max( a,b,c ) <<endl;
  cout <<"max( a,b )=" <<max( a,b ) <<endl;
  return 0;
}

int max( int a, int b, int c ){

  if( a>b ) a = b;
  if( c>a ) a = c;
  return a;
}

int max( int a, int b ){

  if( a>b ) return a;
  else return b;
}

15.函数模板:用于函数体形同,函数参数个数相同,唯独类型不同的情况。
定义: template <typename T,.....> T 是类型 或使用(不常用)template <class T,.....>
typename 表示类型名
示例:
template <typename T>
T max( T a, T b ){

return a>b?a:b;
}
编译运行时,由实参来指定类型。

16.带默认参数的函数:float max(float r = 9.02); 即调用max()时默认实参r=9.02,要重新赋值:max(4.4);即可。其他形式:int mina(int a, int b=10); 调用mina(20) ,实际为mina(20,10);
注意:

  a.默认值的参数一定放最右端,因为实参赋值是从左到右的!
  b.函数在调用前定义,应直接在定义中给出默认值,若是函数定义在调用后,则在函数声明中需给出默认值,在定义的时候可以省略不写默认值。
  c.不能既重载又带默认参数,易出现二义性,程序不知道执行哪个函数,机器很笨的。

如果在函数声明时为 float f(int a = 10);而在定义时为float f(int a = 20){...},则以声明时的为默认值,定义的无效,其实只要在声明时指定好就行了,定义的时候不必再多此一举

 

17.C++中规定一个函数不能完整的再嵌套另一个函数,但是可以嵌套调用。

18.递归函数:即函数调用函数本身。执行过程分两个阶段:回推 递推 二者之间的转折点为递归结束条件,一般使用if语句。

19.变量空间属性:
  局部变量=>函数内部,或者复合语句内部有效
  全局变量=>函数外部,从定义处开始有效,少用为好

  变量时间属性->存储期:
    静态存储期 程序运行期间,系统对变量分配固定的的存储空间 静态存储区(空间)<-全局变量,占固定的存储单元,程序执行完释放

    动态存储期 程序运行期间,系统对变量动态地分配存储空间 动态存储区(空间)<-函数形参,函数中的自动变量(未加static修饰),函数调用时的现场保护和返回地址等。

    
20.变量存储类别:
  a.auto 自动变量,可以省略不写 如:int a;为动态存储;
  b.static声明的静态局部变量, 在函数执行完,该变量保持执行完的值,不会立刻销毁,在整个运行期间都占存储单元.
例:
#include<iostream>
using namespace std;

int f(int a){

  auto int b = 0;
  static c = 3;/*第一次调用后c值改变,保存改变后的值,再次调用不再执行此句,如果未指明c的值,编译时,默认赋值为0*/ b = b+1;
  c = c+1;
  return a+b+c;
}

int main(void){

  int a = 2,i;
  for(i=0;i<3;i++)
  cout <<f(a) <<"";
  cout <<endl;
  return 0;
}
执行结果:7 8 9;
  c.register 寄存器变量 <-了解即可
  d.extern 提前引用声明,即单文件时使全局变量的作用范围扩大到整个文件,而不是从定义处开始。
若是多个文件 :  file1.cpp      file2.cpp
          int a;    extern int a;/*做外部变量声明,此时两个文件都可使用同一个变量a.*/
        file1.cpp   file2.cpp
        static int a; extern int a; /*此时file1的a只能被file1使用,file2正常使用自己的a;static修饰的变量a,此时被称为静态外部变量。这两种都是编译时分配内存的,即静态存储。*/

posted @ 2016-07-13 10:59  Dk_ddk  阅读(209)  评论(0编辑  收藏  举报