C/C++ 中& * const与 const * 以及volatile的使用

1) &的使用
       a)作为取址运算符,运用在一个对象上,返回对象的地址。运用在赋值语句的右侧,或者指针变量初始化表达式中。
   
   
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 99;
  6. int ra = *&a;
  7. int *pa = &a;
  8. cout << "The first value is "<<ra<<endl
  9. <<"The second value is "<<*pa<<endl;
  10. return 0;
  11. }
       b) 引用的声明,在类型名称与所声明的引用名称的中间。
    
    
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 99;
  6. int &ra = a;
  7. cout << "The value is "<<ra<<endl;
  8. return 0;
  9. }

2) * const 与  const * 的使用
       假设有一个ptr指针,它保存变量val的地址。
       Type* ptr = &val;
       当使用指针时,会涉及两个对象:指针本身以及它所指向的对象。这意味着对const可以采用三种保护层次。
        a) 如果使用指针时ptr无法指向任何其他的内存地址(无法保存另一个内存地址),有两种编写语句的方式:
        Type* const ptr = &val;
        Type* const ptr(&val);
        指针是常量(const),但地址对象是可以变化的。
        b) 如果希望确保无法通过解引用ptr来改变val的值,有两种编写语句的方式:
        const Type* ptr= &val;
        const Type* ptr(&val);
        c) 如果希望两者都收到保护(无法改变),则可以编写语句
        const Type* const ptr =&val;
        const Type* const ptr(&val);
        可以用以下方式进行记忆:把定义从右向左读,就是从定义的变量开始读。
        const char* x = &p; /*x 是一个指向const char的指针*/
        char* const y = &q;/* y 是一个指向char的const指针*/
        const char* const z = &r;     /*z 是一个指向const char的const 指针*/

3) volatile
        volatile 是能够修改变量和指针定义的另一个关键字。同const一样,可以理解成const的反义。用它标记的对象在任何时候都可以修改,可以发生在另一个程序或者另一个线程中。它是对编译器的一种提示,访问它时,不应该进行优化。
        volatile可以用于变量,但是多用于指针,与const一样,volatile可以用于指针或者被编址的内存。
        为了将常规指针声明成volatile内存,应使用形式:
        volatile  char* vcharptr;
        为了将volatile指针声明称常规内存,应使用形式:
        char* volatile vptrchar;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值