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

C++第二课(2013.9.27 )

时间:2014-10-20 22:51:14      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   使用   for   sp   文件   div   

  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 4
106 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 )

标签:style   blog   color   ar   使用   for   sp   文件   div   

原文地址:http://www.cnblogs.com/shuixi2013/p/4038701.html

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