详解指针常量和常量指针(C、C++工程师面试题)
常量指针,指针常量,详解,C++面试题2016-06-08
何为指针,其实指针也是一种数据类型,具有指针类型的变量称为指针变量。指针变量用于存放内存单元地址。
C++提供了两个与地址相关的运算符(“*”和“&”)。
特性:不能通过指针修改所指对象的值,但是指针本身可以改变,可以指向另外的对象。
<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>
运行结果:
#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; }
运行结果:
<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的内存空间为只读)
#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; }运行结果:
特性:这时指针本身的值不能被修改,但可以通过指针修改其所指向变量的值。
#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; }运行结果:
#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; }运行结果:
常量指针:指向常量的指针。
指针常量:指针类型的常量。