详解指针常量和常量指针(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; }运行结果:
总结:
常量指针:指向常量的指针。指针本身可以改变,可以再次指向另外的对象。
不能通过指针修改其所指向的对象的值。
对象本身的值可以直接修改。
指针常量:指针类型的常量。
指针本身的值不能改变,即不能再指向另外的对象。
可以修改指针所指对象的值。
相关文章推荐
- C语言大纲——数据类型
- c++异常处理(使用虚函数)
- 使用C++实现SDK之WebBrowser容器
- 使用CreateThread 时报错,函数调用缺少参数列表
- C语言陷阱解析--I Do Not Know C
- C与C++函数声明时的几个小的语法差异
- superwebbench
- C++Primer 1.2章笔记整理
- C语言实现动态字符串,并且统计大小写
- Rotate Array
- C语言通过串口发送AT指令
- C++ vector【基础】
- C/C++开发者必不可少的15款编译器+IDE
- 【心酸历程】atom上打造C/C++的ide
- C++中引用和匿名对象的理解和本质剖析
- C++ 引用外部 DLL
- 什么是预编译?何时需要预编译 (C、C++工程师面试题)
- Android之JNI NDK错误 c/c++ indexer has encountered a problem, An internal error occurred during xx
- 定义、声明、初始化、赋值 小记(C++)
- 图的最小生成树 Prim算法 C++实现