您的位置:首页 > 编程语言 > C语言/C++

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

2016-06-08 18:35 1046 查看

概述:

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

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;
}
运行结果:






总结:

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

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

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

指针本身的值不能改变,即不能再指向另外的对象。
可以修改指针所指对象的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: