首页 > 代码库 > C++第二课(2013.9.27 )

C++第二课(2013.9.27 )

  1 //引用的作用:代码简洁  2 //形参和实参同地址,实现的方式和指针的一样  3 //引用和指针没有本质的区别  4   5 //强转引用  6 float f = 3.14f;  7 cout<< hex << (int&)f << endl;  8 cout<< hex << *(int*)&f <<endl;//两式是等价的  9  10 cout<< hex << (float&)(int&)f << endl; 11 cout<< hex << *(float*)&(*(int*)&f) << endl;//两式是等价的 12  13 //引用类型和指针类型的区别 14 char ch = a, ch2 = b; 15  16 //1.引用不能为 NULL ,必须初始化,指针可以为 NULL 17 // char& Ref = NULL;   错误:引用不能为 NULL 18 // char& Ref = 123;    错误:引用不能为常量 19 // char& Ref ;         错误:引用必须初始化 20    char& Ref = ch;     //引用的初始化 21    Ref = 2; 22  23 //2.引用一旦绑定无法解除, 指针可以 24    Ref = ch2; //这里 Ref 的地址和 ch 的地址是一样,而不是 ch2 的地址 25     26 //3.没有二级引用,有二级指针 27  28 //引用当作函数的返回值 29 //1.当返回值为引用时,不能返回局部变量或形参变量 30 //使用场合:返回返回值当左值 31  32 int& fun() 33 { 34     //全局变量 35     return g_nNum; 36 } 37  38 int& fun1(int *pNum) 39 { 40     //实际上返回值的是实参 41     return *pNum; 42 } 43  44 int nN = fun1(); 45 int& r = fun1(); 46  47 //返回值当左值 48 fun1() = 2; 49  50  51 //const的用法 52 //1.不能当左值,通常用来替代无参数宏 53     不能把 const 转化为 非const  54     float const PI = 3.14f; 55     const float PI = 3.14f; 56  57 //2.const 是编译器做限制 58 float Area (float R) 59 { 60     float* pf = NULL; 61     const float PI = 3.14f;//此时的 PI 是在栈中不是在堆中 62     pf = (float*)&PI; 63     *pf = 2; //此时 PI 的值改变为 2 64     cout<< PI << endl; 65 } 66  67  char szBuff[10] = "Hello"; 68  69 //指针的值可以修改,指向的内容不能被修改 70   const char *psz1 = szBuff; 71   psz1 = NULL; 72   //psz1[0] = ‘a‘; //错误 73  74 //指针的值可以修改,指向的内容不能被修改 75     char const *psz2 = szBuff; 76   psz2 = NULL; 77   //psz2[0] = ‘b‘; //错误 78   79 //指针的值不能修改,指向的内容可以修改 80     char * const psz3 = szBuff; 81     //psz3 = NULL; 82     psz3[0] = c; 83      84 //指针的值不能修改,指向的内容不能修改 85     char const * const psz4 = szBuff; 86     //psz4 = NULL; 87     //psz4[0] = ‘d‘; 88      89 //指针的值不能修改,指向的内容不能修改 90     const char * const psz5 = szBuff; 91     //psz5 = NULL; 92     //psz5[0] = ‘d‘; 93      94 总结: 95 1.当 const 在 * 的左边时,指针所指向的内容不能修改 96 2.当 const 在 * 的右边时,指针的值不能修改 97 3.当 * 的两边都有 const 时,指针的值和指针所指向的内容都不能修改 98  99 void fun( const int& nN1, const int& nN2)100 {101     //nN1、nN2 的值都不能被改变102     cout<<nN1<< <<nN2;103 }104 105 调用函数--fun(2, 4);  ------->输出:2 4106 const引用,首先为 2和4 申请堆空间,然后地址107const--引用支持 常量 传给引用108 109 110 //内联 inline 111 //注意:加了inline 编译器认为函数简单就内联,否者不内联(没有if for while。。。)112 //1.通常用来替代有参宏113 //2.比有参宏多了类型检查114 //3.debug版不内联115 //4.可以在头文件声明定义放一起,多文件包含没问题116 //在类机构中,在类体内定义的成员函数都是内联函数117 118 #define ADD(x,y) ((x) + (y))119 120 inline int Add(int nNum1, int nNum2)121 {122   return nNum1 + nNum2;123 }124 125 int main(int argc, char* argv[])126 {127   cout << Add(1, 2) << endl;128   cout << Add(2, 2) << endl;129   cout << Add(3, 2) << endl;130 131   cout << ADD(1.2, 2) << endl;132     return 0;133 }134 135 136  137  

 

C++第二课(2013.9.27 )