浅谈常量指针与指针常量
最后总结两句:
1) 如果const 修饰在*pi前则不能改的是*pi(即不能类似这样:*pi=50;赋值)而不是指pi.
2) 如果const 是直接写在pi前则pi不能改(即不能类似这样:pi=&i;赋值)。
补充三种情况。
这里,我再补充以下三种情况。其实只要上面的语义搞清楚了,这三种情况也就已经被包含了。不过作为三种具体的形式,我还是简单提一下吧!
情况一:int * pi指针指向const int i常量的情况
//**********begin*****************
const int i1=40;//定义了一个整型常量i1。
int *pi; //定义了一个指针pi。
pi=&i1;//这样可以吗 不行,VC下是编译错。
//const int 类型的i1的地址是不能赋值给指向int 类型地址的指针pi的。否则pi岂不是能修改i1的值了吗!
pi=(int* ) &i1; // 这样可以吗 强制类型转换可是C所支持的。
//VC下编译通过,但是仍不能通过*pi=80来修改i1的值。去试试吧!看看具体的怎样。
//***********end***************
情况二:const int * pi指针指向const int i1的情况
//*********begin****************
const int i1=40;
const int * pi;//定义常量指针
pi=&i1;//两个类型相同,可以这样赋值。很显然,i1的值无论是通过pi还是i1都不能修改的。
//*********end*****************
情况三:用const int * const pi申明的指针
//***********begin****************
int i
const int * const pi=&i;//你能想象pi能够作什么操作吗 pi值不能改,也不能通过pi修改i的值。因为不管是*pi还是pi都是const的。
//************end****************
· [ASP.NET].net知识结构
· [VB.NET]VB.NET委托的使用
· [C#]c# Winform 保存修改后的配置
· [ASP.NET]ASP运行环境--.NetBox
· [C#]C#特性学习与使用
· [ASP.NET]asp.net使用Mysql乱码处理
· [C#]把Array说透
· [VB.NET]VB中用ADO对象动态创建数据库和表
· [C#]winform c#写ini文件


·JAVA Swing学习基础教程指南
·java8 安装使用教程
·专题:c指针编程指南
·认识全文检索引擎架构 Lucene
·深度理解Struts 2 框架
·集成开发环境 Eclipse 提高篇
·各种关系型数据库死锁的解决方案
·深入浅出讲解轻型数据库系统
·浅水也能摸鱼--JAVA虚拟机
·QT编程基础入门到精通