- 特别强调:指针一定慎用(*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'表示只可读不可写