注意点:
不能通过const指针来改变数据(因为不能保证指向的也是常量) 只能通过变量名来更改(非const变量的情况下)
但是可以更改const指针的指向(但依然不能更改值) const int* ps = &abc
这种的话是不允许指正指向其他地址: int* const ps = &abc 如果指向的是非const变量的话 可以更改其值
那 const int* const p = &abc 则既不能改变其指向也不能改变其值
如果const指针指向const数据(变量) 那就都不能更改 既不能通过const指针改变其值,也不能通过变量名改变const变量的值
如果是const指针指向非const数据(常规变量)(这个C++不允许 要么强制类型转换)
那如果指针的指针呢?
const **pp2 初始化时指向了常规指针*p1(非const) 然后再通过 这个指针(*pp2)指向const变量的地址(const int &n)
那么, 通过*p1可以改变该const变量的值。
嗯。。。我怎么感觉这是将const数据的临时内存地址变量赋值给**pp2解引用出来的临时指针变量。这样就变成两边都不是const了
如果是const 数组的话 则不允许将数组传递给 非const数组形参的函数
最后说一个: 函数传参时 可以设置形参为csont 数组 一次来保护数据 但是 这里要求数组元素必须是基本数据类型,而不是指针或指针的指针 不然无法起到效果
二维数组的表示:
a[2][2]
a[][2](不指定行数)
指针表示:
int (*a)[2]
获得某个下标的值 *(*(a + 1) + 1) == a[1][1]
针对结构类型:
应添加const 作为函数的结构类型的形参
完结 还差一些就可以到第八章了 加油