微信扫一扫

028-83195727 , 15928970361
business@forhy.com

详解指针常量和常量指针(C、C++工程师面试题)

常量指针,指针常量,详解,C++面试题2016-06-08

概述:

何为指针,其实指针也是一种数据类型,具有指针类型的变量称为指针变量。指针变量用于存放内存单元地址。

C++提供了两个与地址相关的运算符(“*”和“&”)。

  • “*”:称为指针运算符;
  • “&”:称为取地址运算符;


常量指针:指向常量的指针。

特性:不能通过指针修改所指对象的值,但是指针本身可以改变,可以指向另外的对象。

实例1:此时p为常量指针。

<span style="font-size:18px;"><strong>#include<iostream> 
using namespace std;
int main()
{
	int a=10;
	
	const int* p=&a;	//指向常量的指针 ,不能通过指针来修改所指对象的值。但指针本身可以指向其他的对象。 
	
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;	

	return 0;
}</strong></span>


运行结果:




实例2:常量指针,指针本身的值,可以改变,可以指向其他的对象。

#include<iostream> 
using namespace std;
int main()
{
	int a=10;
	
	const int* p=&a;	//指向常量的指针 ,不能通过指针来修改所指对象的值。但指针本身可以指向其他的对象。 
	
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;	
	cout<<endl;
	
	int b=20;
	p=&b;	// 修改常量指针p的指向,让其指向其他的对象 
	 
	cout<<"b= " << b <<endl;
	cout<<"*p= "<< *p <<endl;	

	return 0;
}


运行结果:




实例3:常量指针,通过指针去修改其所指对象的值。(不可行,编译器会报错)

<strong><span style="font-size:18px;">#include<iostream> 
using namespace std;
int main()
{
	int a=10;
	
	const int* p=&a;	//指向常量的指针 ,不能通过指针来修改所指对象的值。但指针本身可以指向其他的对象。 
	
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;	
	cout<<endl;
	
	int b=20;
	p=&b;	// 修改常量指针p的指向,让其指向其他的对象 
	 
	cout<<"b= " << b <<endl;
	cout<<"*p= "<< *p <<endl;	
	
	*p=30;	//通过指针p来修改其所指对象的值(不可行的,编译器会报错) 
	
	cout<<"b= " << b <<endl;
	cout<<"*p= "<< *p <<endl;		

	return 0;
}</span></strong>


运行结果:(此处编译器提示,分给p的内存空间为只读)




实例4:常量指针。不能通过指针来修改其所指向变量的值,但可以直接修改指针所指变量的值(即不通过指针,直接修改其值)。

#include<iostream> 
using namespace std;
int main()
{
	int a=10;
	
	const int* p=&a;	//指向常量的指针 ,不能通过指针来修改所指对象的值。但指针本身可以指向其他的对象。 
	
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;	
	cout<<endl;
	
	a=20;	//可以直接修改其值,不通过指针p 
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;		

	return 0;
}
运行结果:




指针常量:指针类型的常量

特性:这时指针本身的值不能被修改,但可以通过指针修改其所指向变量的值。

实例1:通过指针类型的常量,修改其所指对象的值

#include<iostream> 
using namespace std;
int main()
{
	int a=10;
	
	int* const p=&a;	//指针类型的常量 ,指针本身的值不可以被改变,但可以通过它修改其所指对象的值。 
	
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;	
	cout<<endl;
	
	*p=20; 	//通过指针,修改其所指对象的值。 
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;		

	return 0;
}
运行结果:



实例2:指针类型的常量,不能将其指向其他的变量。(否则编译器报错)

#include<iostream> 
using namespace std;
int main()
{
	int a=10;
	
	int* const p=&a;	//指针类型的常量 ,指针本身的值不可以被改变,但可以通过它修改其所指对象的值。 
	
	cout<<"a= " << a <<endl;
	cout<<"*p= "<< *p <<endl;	
	cout<<endl;
	
	int b=20; 
	p=&b; 	//指针类型的常量,不能将其指向另外的对象。 
	cout<<"a= " << b <<endl;
	cout<<"*p= "<< *p <<endl;		

	return 0;
}
运行结果:



总结:

常量指针:指向常量的指针。

  • 指针本身可以改变,可以再次指向另外的对象。
  • 不能通过指针修改其所指向的对象的值。
  • 对象本身的值可以直接修改。


指针常量:指针类型的常量。

  • 指针本身的值不能改变,即不能再指向另外的对象。
  • 可以修改指针所指对象的值。