const 和一级指针、二级指针、引用的结合使用总结
2017-11-20 12:09
295 查看
#include<iostream> #include<typeinfo> using namespace std; int main(int argc, char* argv[]) { const int a = 10; // C++中是真正的常量,C++是强类型语言 但是在C语言中是常变量,可以通过地址修改常变量的值 int b = a;//值传递,正确!a和b没有联系,各自独立的地址,只是值一样 int &c = a;//引用传递,c被更改时a也被更改,不符合a常量的定义。 //=号左边是int*类型,右边是cosnt int* 。错误的赋值操作! //正确表达为 cosnt int &c = a; const int a=10; a = 100;//const变量不可以修改,不能为左值。错误!且不能修改 const int a=10; int *p = &a;//=号左边是int*,右边是const int * //从const int * 到 int * 少了const //一级指针和const结合少了const是错误的类型转换 //因为通过对*p=100赋值可以修改常量a,编译器不予讯所以错误表达式 //正确修改const int *p = &a,用const 修饰*p使得a不可能被修改 int *const p = &a; 错误的表达式,const 只是修饰了指针p,p不可以修改但是*p还是会被修改从而间接修改a int a = 10; const int *p = &a;//const int * <== int* //cosnt 和一级指针结合,多了const正确表达式 //声明a不可通过*p被修改 int *q = p; //int * <= const int * cosnt 和一级指针结合,少了const //错误的表达式,*p是不能被修改的,但是泄漏了地址可以通过*q修改*p的值。不允许 const int a = 10; int *p = &a;//=号左边int * 右边const int *,一级指针和const结合,少了const会被间接修改a的值 //错误的表达式 int a = 10;//将引用换成指针是:=号左边是const int ** 右边是int ** int *p = &a;//多级指针多了少了const都是错误的表达式 const int *&q = p;//const int **q = &p; /* 内存上理解就是 const int * &q = p;// const修饰 int ** 不被修改,即变量a的内存不能被修改 //但是*q = 100 却可以去修改a的内存 修改方法1 int a = 10; int *p = &a; const int *const&q = p;//此时不能通过*q = 100去修改a的地址。 修改方法2 int a = 10; const int *p = &a;//不能通过*p去修改a const int *&q = p;//此时也不能通过*q = 100去修改a的内存。右边也是const int **类型 修改方法3 int a = 10; int *p = &a;//可以通过*p去修改a int *&q = p;//也可以通过*q = 100去修改a的内存。两边都是 int **类型 */ int a = 10; const int *p = &a; int *&q = p; // int** <= const int **//二级指针少了const错误 //具体原因同上分析 int a = 10; int *p = &a; int *const*q = &p;//一级指针多了const 正确 cin.get(); return 0; } /* 总结::: 错误的类型转换 =============================================== const int* => int* const int** => int** const int* => int*& int** => const int** int* => const int*& int *const** => int*** int*** => int *const** ============================================ const 和多个*结合使用时,查看const右边有几个* ,const 修饰的是const右边的内容。 const只有修饰指针*是才会参与类型 const和* int * const * 是const 和一级指针结合使用。 在类型转换时,被赋值的变量多了const正确,少了const错误 const和** const int ** 是const 和二级指针结合使用。 在类型转换时,无论多了还是少了COSNT都是错误的。 =============================================== const: 1.const修饰的常量不能作为左值 2.当常量的地址给泄露出去时不能被间接修改常量的值 const出错的原因: 1.你把const值直接改了 2.你把const常量的地址放到了一个普通的指针里面 3.你把const常量的地址放到了一个普通的引用里面 */
相关文章推荐
- const和指针结合使用的例子
- 【总结归纳】一级指针和二级指针的使用
- 指针与引用的混合使用总结
- const使用注意事项 指针 引用,指针引用区别
- c总结10--- 二级指针使用三种模型之三(二级指针3)
- C++知识点总结(上):指针和引用,static关键字,const关键字,malloc\free和new\delete的区别等
- C语言二级指针与指针数组的结合使用.
- 总结:指针、引用、const
- const 和二级指针的使用
- C++的那点事,const,指针和引用的混合使用
- C语言中const与指针使用方法总结
- C++的const、指针、引用总结
- const和引用/指针的结合!
- 关于c++中const和指针结合的使用
- 总结1->sizeof-默认值参数的函数-static-指针和引用概念-const-CAS
- C++cosnt总结,捎带总结指针引用 define和const
- const与一级指针二级指针结合
- paip.指针 引用 c++ java的使用总结.
- c总结9--- 二级指针使用三种模型之二(二级指针2)
- 指针与引用使用总结