常指针 和 常引用

笔记const


1.常引用

对常引用来说他一般是对由系统临时分配而无法改变的中间变量起别名如以下程序中的两种情况,而引用则是给一般的变量起别名

//引用是给变量起一个别名

#include <iostream>
using namespace std;
int a = 'a';
int main()
{
    /*
        以下语句在内存中是这样干的char temp(系统在栈中临时分配的) = a;
        char &r_a = temp;
    */
    char const &r_a = a;

    //用(int *)输出存储在栈中r_a的地址
    cout << "r_a: "<< r_a << "\n &r_a: " << (int *)&r_a <<endl;    

    cout << "a: "<< a << "\n &a: " << &a <<endl;

    int const &r1_a = a + 1;

    //用(int *)输出存储在栈中r_a的地址注意与上面的区别&r_a = a;
    cout << "r1_a: "<< r1_a << "\n &r1_a: " << (int *)&r1_a <<endl; 
    return 0;
}

2.常指针

  • 这是指针常量
#include <iostream>
using namespace std;
int main()
{
    //指针常量
    int a = 10;
    int * const p_a = &a;
    //p_a = &a; 注意不能在这儿初始化。
    cout << "p_a: "<< p_a << ", *p_a: "<< *p_a << endl;
    cout << "a: " << a << ", &a: " << &a << endl;
    *p_a = 1;
    cout << "*p_a: "<< *p_a << endl;
    int b = 12;
    /*
      p_a = &b; 因为这是一个指针常量, 所以不能乱指,但可以改变其所指内存的值,*p_a = 1; ok的
    */
    cout<< "p_a: " << p_a << ", *p_a: " << *p_a << endl;
    cout<< "b: " << b << ", &b: " << &b << endl;

}
  • 这是常量指针
#include <iostream>
using namespace std;
int main()
{
    //常量指针
    int a = 10;
    int const *p_a;
    p_a = &a;

    cout << "p_a: "<< p_a << ", *p_a: "<< *p_a << endl;
    cout << "&a: " << &a << endl;

    /*p_a = 1;
     注意由于此处是常量指针,故而报错, 所以不能改变所指内存的值,
     但可以改变他的指向, 如下:
    */

    int b = 12;
    p_a = &b;      //完全没有问题

    cout<< "p_a: " << p_a << ", *p_a: " << *p_a << endl;
    cout<< "b: " << b << ", &b: " << &b << endl;

}

总结

int const *p; //常量指针
int *const p = &a; //指针常量得在这儿初始化

  其实就是看const修饰谁,修饰*p, *p不能改,为常量指针。修饰p, 为指针常量, p 值不能改。类似的还有函数指针、指针函数、数组指针、指针数组、如下:

int (*p)[3];  //(p先与*结合)为指针变量->指向有三个元素的数组
int *p[3];    //(p先与[]结合)为一个数组:包含着三个指针元素
int (*p)();   //(p先与*结合)为指针变量->指向无参的函数首址
int *p();    //(p先与()结合)为函数名:返回类型为int *
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值