初学C++,有很多不明白的,这是第一篇博客,希望与大家共勉。很多摘自C++primer plus书籍。
一、首先介绍指针和const在不同位置的区别
1 const int *pt=&age;
2 int * const pt =&age;
3 const int* const pt = &age;
1const int *pt=&age;表示指针pt指向的值是const int,因此不能使用pt修改这个值。换句话说,*pt的值是const,不能被修改:
*pt+=1; 非法的
cin>>*pt; 非法的
但不意味着pt指向的值是一个常量。例如,可以直接通过age变量来修改age的值,但不能通过pt指针来修改它:
*pt=20; 非法的
age=20; 合法的
1const int *pt=&age;中的const只是防止修改pt指向的值,而不能防止修改pt的值。可以将一个新的地址,赋给pt:
int sage=80;
pt=&sage; 合法
允许pt++;
例如,C++ Primer Plus 中 P221,代码
int sum_arr(const int * begin, const int * end)
{
const int * pt;
int total = 0;
for (pt = begin; pt != end; pt++)
total = total + *pt;
return total;
}
2.Int * const pt =&age;中使用const的方式,使得无法修改指针的值,使得pt只能指向age,但允许使用pt来修改age的值。
Const float g_earth=9.80;
Const float *pe=& g_earth; 合法的
float *pm=& g_earth; 非法的 禁止将const地址赋给非const指针,如果非这样做,使用强制转换类型。
3.const int* const pt = &age; 表示既不能通过pt修改age的值,也不能修改pt的值。
二、const修饰函数参数
传递过来的参数在函数内也是不可以改变的,例如:
Const保护数组
为了防止函数无意中修改数组的内容,可在声明形参时,使用关键字const。例如:
void show_array(const double ar[], int n);
该声明表明,指针ar指向的是常量数据。这意味着不能使用ar修改该数据,可以使用ar[0]这样的值,但不能修改。注意,这并不意味这原始数据必须是常量,而只是意味着不能在show_array()函数中修改这些数据。因此,在show_array()将数组视为只读数据。
如果在show_array()函数中执行以下操作,编译不成功,ar[0]+=10。
未完待续。。。