Date:
2014-1-1
Summary:
const 修饰符笔记
Contents:
1.const 修饰符
声明一个常量数据类型 , 在编译时就确定数据类型
2.const 与 指针
一般情况会有两种: const 在 *的左边或者右边
(1)const 在 * 左边
则无法通过该指针修改其指向的内存的值
ex:
int num = 10;
const int* p = #
//如果(*p)++ ,则编译器报错
(2)const 在*右边
则无法让该指针指向其他内存空间
int num1 = 10;
int num2 = 20;
int* const p = &num1;
//如果 p = &num2,则编译器报错,但是可以(*p)++
3.const 与函数参数
尽量把函数的形参声明为const指针,这样的好处:
(1)函数的实参可以使用const指针和非const指针,否则函数不接受const指针
(2)函数内部不能修改const指针指向的数据,避免函数内部污染数据
Notes:
Nothing Here
Sample:

1 /**
2 * 普通方法
3 *
4 * @param nNum1 nNum1 description
5 * @param nNum2 nNum2 description
6 *
7 * @return return value description
8 */
9 int add1(int nNum1,int nNum2)
10 {
11 return nNum1 + nNum2;
12 }
13
14 /**
15 * 形参为 非const指针
16 *
17 * @param pNum1 pNum1 description
18 * @param pNum2 pNum2 description
19 *
20 * @return return value description
21 */
22 int add2(int* pNum1,int* pNum2)
23 {
24 return (*pNum1) + (*pNum2);
25 }
26
27 /**
28 * 形参为 const指针
29 *
30 * @param pNum1 pNum1 description
31 * @param pNum2 pNum2 description
32 *
33 * @return return value description
34 */
35 int add3(const int* pNum1,const int* pNum2)
36 {
37 return (*pNum1) + (*pNum2);
38 }
39
40 int main(int argc, const char * argv[])
41 {
42
43 // insert code here...
44 std::cout << "Hello, World!
";
45
46 cout << "test 1 start." << endl;
47
48 int num1 = 10;
49 int num2 = 20;
50 int* p1 = &num1;
51
52 cout << "num1 : " << num1 << "
" << "pNum1 : " << (*p1) << endl;
53 cout << "add self by pointer :" << endl;
54
55 (*p1)+=1;
56
57 cout << "num1:"<< num1<< endl;
58 cout << "use const pointer
" << endl;
59
60 const int* p2 = &num2;
61 p1 = &num2;
62 (*p1)++;
63 // (*p2)++; //note:编译器报错,不能修改num2内存中得值
64 p2 = &num1; //note:p2的指可以被修改,即可以指向其他内存空间
65
66 int* const p3 = &num1;
67 (*p3)++;
68 // p3 = &num2; // note:编译器报错,不能修改p3的值,即永远指向num1的内存空间
69
70
71 cout << "test 2 start." << endl;
72 cout << "call [add1] method :" << add1(num1,num2) << endl;
73
74 // 使用非const的指针作为实参
75 cout << "call [add2] method :" << add2(p1,p1) << endl;
76
77 // 使用const的指针作为实参,编译报错
78 // cout << "call [add2] method :" << add2(p1,p2) << endl;
79
80 // 在add3,由于形参的指针被const修饰,则实参可以接受 const指针 和 非const指针
81 cout << "call [add3] method :" << add3(p1,p2) << endl;
82
83
84
85 return 0;
86 }
THE END