yelede2009的专栏

1.cosnt指针 int age = 39;const int * pt = &age;

不可以使用pt改变age的值,即*pt是const,不可修改。

*pt += 1;// 非法操作cin >> *pt; // 非法操作

但是,pt的声明并不意味着它指向的变量(age)为const,而仅仅是说不可以使用pt来修改它指向的变量(age)。

*pt = 20;// 非法操作age = 20;// ok2.指向const对象的指针2.1指向const对象的const指针 const float g_earth = 9.80;const float * pe = &g_earth; // ok

g_earth 和 pe都为const,都不可以用来修改其所对应的值(9.80)。

2.2指向const对象的非const指针

C++不允许把const地址赋值给非const指针。

const float g_moon = 1.63;float * pm = &g_moon; // 非法操作

当然,你也可以使用类型转换突破此限制。

3.指向指针的指针 const int **pp2;int *p1;const int n = 13;pp2 = &p1;// 非法操作。先假设合法。*pp2 = &n;// ok,两者都是const,但 p1 = &n 非法。*p1 = 10;// 此行的语法是合法的,但不能成功修改n。

因此,把非const地址或指针赋值给const指针的操作只在一次间接地址操作的情况下适用。换句话说,可以把const或者非const的数据赋值给const指针,,只要此数据本身不是指针类型。

4.const参数 const int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};…int sum(int arr[], int n); // 应该是 const int arr[]int j = sum(months, 12); // 非法

上面的函数调用试图把const指针(months)赋值给非const指针(arr),将产生编译错误。

小建议: 只要能够使用const,就使用。建议给指针声明添加const有两个原因: 1.可以防止无意的修改数据; 2.使用const允许函数处理const和非const的实参。如果在函数原型中省略const,则函数只可以接受非const的数据。 只要可以,建议把形参声明为const指针。

怀着淡定从容的心态去面对,也就没有了真正意义上的寂寞了。

yelede2009的专栏

相关文章:

你感兴趣的文章:

标签云: