C++之const——禁止指针修改原数据

  • 特别强调:指针一定慎用(*ptr_num)++,会改变指针所指向数的数值,使用指针最好配合const禁止数值被修改!!!

可以通过两种不同的方法将const关键字用于指针。
1、第一种方法是让指针指向一个常量对象,防止使用改指针来修改所指向的值。const int num = 1;int * ptr_num = num;实际上第一种方法是不可行的
2、第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。int num = 1;const int * ptr_num = num;实际上可行

//举个例子/

#include <iostream>
#include "class1demo.hpp"
using namespace std;
//声明函数
void sum2(int*, int*);
void sum3(int&, int&);
//定义函数
void sum2(int* ptr_num1, int* ptr_num2)//定义函数1通过指针方法
{
    (*ptr_num1)++;//指针指向的数值++
    cout << "此时指针指向的值为: " << *ptr_num1 << endl;
}
void sum3(int& num1, int& num2)//定义函数2通过引用方法(就是为实参起个别名)
{
    cout << "sum3函数调用num1时值为: " << num1 <<endl;
}

int main()
{
    int num1 = 10;
    int num2 = 20;
    sum2(&num1, &num2);//调用函数1
    cout << "此时num1的值为: " << num1 << endl;//查看num1是否被修改
    sum3(num1, num2);//调用函数1

    return 0;
}

//程序输出

可以看到本来num1=10,由于错误使用指针,导致数值被修改为num1=11,后面的程序再调用num1时就会出现错误的结果,并且根本不知道错在哪,因为编译器不会报错!!!

此时指针指向的值为: 11
此时num1的值为: 11
sum3函数调用num1时值为: 11

Process returned 0 (0x0)   execution time : 0.145 s
Press any key to continue.
  • 改善方法:使用指针时,为避免数值被修改,可以用const

使用第二种方法:将指针本身声明为常量防止改变指针指向的位置。

//声明函数

void sum2(const int*, const int*);//修改为const类型,

void sum2(const int* ptr_num1, const int* ptr_num2)
{
    (*ptr_num1)++;//修改指针时会报错
    cout << "此时指针指向的值为: " << *ptr_num1 << endl;
}
//会报错error: increment of read-only location '* ptr_num1'表示只可读不可写

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值