c/c++中const关键字用法,以及如何区分指针常量和常量指针实例:
本文参考文献:C语言中const关键字的用法
一、区分常量指针和指针常量的方法:
区分常量指针和指针常量的关键就在于星号的位置,我们以星号为分界线,如果const在星号的左边,则为常量指针,
如果const在星号的右边则为指针常量。如果我们将星号读作‘指针’,将const读作‘常量’的话,内容正好符合。
int const * n;是常量指针,int *const n;是指针常量。
二、const用法:简单来说起不变作用;
1)修饰局部变量,则局部变量的值不变;
2)常量指针:*不可通过改变指针改变变量的值(常量指针指向的值不能被改变);
*注意:但可直接对变量进行赋值改变,或常量指针可以指向其他的地址;
3)指针常量:*指针本身是个常量,不能指向其他地址;
*注意:但地址中保存的数值是可以改变的,可以通过其他指向改变地址的指针来修改;
4)修饰函数的参数:
4.1)防止修改指针指向的内容:用常量指针
4.2)防止修改指针指向的地址:用指针常量
4.3)以上两种结合;
5)修饰函数的返回值:
6)修饰全局变量:
ps:4.5.6点看参考文献讲解(很明确,不做说明)
#include <iostream>
using namespace std;
/**************************************************************************
一、区分常量指针和指针常量的方法:
区分常量指针和指针常量的关键就在于星号的位置,我们以星号为分界线,如果const在星号的左边,则为常量指针,
如果const在星号的右边则为指针常量。如果我们将星号读作‘指针’,将const读作‘常量’的话,内容正好符合。
int const * n;是常量指针,int *const n;是指针常量。
参考文献:https://blog.csdn.net/xingjiarong/article/details/47282255
二、const用法:简单来说起不变作用;
1)修饰局部变量,则局部变量的值不变;
2)常量指针:*不可通过改变指针改变变量的值(常量指针指向的值不能被改变);
*注意:但可直接对变量进行赋值改变,或常量指针可以指向其他的地址;
3)指针常量:*指针本身是个常量,不能指向其他地址;
*注意:但地址中保存的数值是可以改变的,可以通过其他指向改变地址的
指针来修改;
4)修饰函数的参数:
4.1)防止修改指针指向的内容:用常量指针
4.2)防止修改指针指向的地址:用指针常量
4.3)以上两种结合;
5)修饰函数的返回值:
6)修饰全局变量:
ps:4.5.6点看参考文献讲解(很明确,不做说明)
***************************************************************************/
#if 1
/*eg1.10,const方法1,2 修饰局部变量,常量指针 用法实例*/
int main(){
/*const int a=5;//假设直接将变量a设置为const(不变),则后面的a=6;语句将进行报错*/
/*这里说明了被const修饰的局部变量,不可被改变*/
int a=5;
int b=10;
const int* n=&a;//常量指针,指针指向的地址不变
cout << n << endl;//指针地址不发生改变
cout << *n << endl;//5
//*n=10;//不可通过改变指针改变变量的值,否则会报错(常量指针指向的值不能被改变)
a=6;//但可对变量直接赋值,使a的值发生改变
cout << n << endl;//指针地址不变
cout << *n << endl;//6
/*需注意这里是常量指针,可以指向其他地址,而指针常量不能*/
n=&b;//常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。
cout << n << endl;//指针地址发生改变
cout << *n << endl;//10
return 0;
}
#endif
#if 0
/*eg1.10,const方法3 指针常量 用法实例*/
int main()
{
int a = 5;
int b = 10;//下文测试用的
int *p = &a;
cout << p <<endl;//输出p的地址(指向变量a)-----你会发现和后文的地址相同
/*意味着地址未发生改变*/
cout << *p << endl;//输出*p的值为5
int *const n = &a;//指针常量:指针本身是个常量(不能指向其他地址)
cout << n <<endl;//地址不变
cout << *n << endl;//5
//n=&b;//这里报错,n为指针常量,不能指向其他地址
*p = 8;//但指针常量所在地址中,保存的数值可以改变
cout << p <<endl;//地址不变
cout << *p << endl;//8
return 0;
}
#endif