c++之指针常量和常量指针


1.常量指针

 const int  *PtrConst 或者是 int const  *PtrConst (即const 在*的左边)
指向常量的指针,这里所说的“常量”其实在解引用时起到所谓常量的作用,并非是指向的变量就是常量,指向的变量既可以是非常量也可以是常量。总体意思是不能修改指向某变量的值。

让指针指向一个常量,可以防止使用指针来修改所指向的值。

1.常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;

	int a = 1;
	const int *p = &a;
	std::cout << *p << a << std::endl;
	a = 2;//可以
	std::cout<< *p << a << std::endl;

结果
  *p = 2;
   a = 2;

如果是  *p = 3; //报错

因为不能通过这个指针来修改,所以可以用常量指针当函数的参数使用。
2.指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;

	int a = 1;
	const int *p = &a;
	std::cout << "p= "<< *p <<";" << "a=" << a << std::endl;
	int b = 2;
	p = &b;
	std::cout<<"p= "<<  *p << ";" <<"b=" <<  b<< std::endl;

p= 1;a=1
p= 2;b=2

延伸:

1.可以将const 变量的地址赋给指向const 的指针(即常量指针)。

 如 const  int  a = 1;   const int * p = &a;//可以

2.不可以将const 的地址赋给常规指针。

如 const  int  a = 1;    int * p = &a;//不可以

除非使用强制类型转换,const_cast

    const int a = 1;
    int *p = const_cast(&a)//可以

2.指针常量:

int   *const PtrConst;
本质是一个常量,而用指针修饰它。指针常量的值是指针。

1.必须初始化,只能指向一个变量,绝不可再改变指向另一个变量

   //int *const ConstPtr;//报错,error C2734: “ConstPtr”: 如果不是外部的,则必须初始化常量对象

    int a=1;    int *const ConstPtr=&a; //可以
    int b = 2;   ConstPtr=&b;   //不可以

2.指向的地址所对应的内容可以变化。

int a=1;    int *const ConstPtr=&a;    ConstPtr = 3; //可以

如果出现在星号两边,表示被指物和指针都是常量。
 

你可能感兴趣的:(c++,c++)