指针常量和常量指针的区别.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:2 大小:19KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

指针常量和常量指针的区别.doc

指针常量和常量指针的区别.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在C/C的学习中有人经常搞不清楚“常量指针”和“指针常量”这两个概念。其实简单一点讲“常量指针”所指向的地址上的数据是常量而“指针常量”所指向的地址是常量地址上面的数据是可以变化的。首先告诉大家一个小规则就是像这样连着的两个词前面的一个通常是修饰部分中心词是后面一个词怎么说呢就像这里的常量指针和指针常量。常量指针表述为“是常量的指针”它首先应该是一个指针。常量指针就是指向常量的指针关键字const出现在左边表示指针所指向的地址的内容是不可修改的但指针自身可变。指针常量表述为“是指针的常量”它首先应该是一个常量。指针常量指针自身是一个常量关键字const出现在右边表示指针自身不可变但其指向的地址的内容是可以被修改的。再分开细细说明常量指针它是一个指针什么样的指针呢它是一个指向常量的指针就是说我们定义了一个常量比如constinta7那么我们就可以定义一个常量指针来指向它constintpa也可以分成两步即constintppa那么它有什么作用呢首先我们来说说常量的属性因为我们的指针是指向常量的常量和变量的变量的不同之处在于我们不能对其内容进行操作具体说就是修改而我们的指针是什么它的内容本身是一个地址设置常量指针指向一个常量为的就是防止我们写程序过程中对指针误操作出现了修改常量这样的错误应该如果我们修改常量指针的所指向的空间的时候编译系统就会提示我们出错信息。总结一下常量指针就是指向常量的指针指针所指向的地址的内容是不可修改的。再来说说指针常量它首先是一个常量再才是一个指针。常量的性质是不能修改指针的内容实际是一个地址那么指针常量就是内容不能修改的常量即内容不能修改的指针指针的内容是什么呀指针的内容是地址所以说到底就是不能修改这个指针所指向的地址一开始初始化指向哪儿它就只能指向哪儿了不能指向其他的地方了就像一个数组的数组名一样是一个固定的指针不能对它移动操作比如你使用p系统就会提示出错。但是它只是不能修改它指向的地方但这个指向的地方里的内容是可以替换的这和上面说的常量指针是完全不同的概念。作一下总结指针常量就是是指针的常量它是不可改变地址的指针但是可以对它所指向的内容进行修改。对了忘了说说它怎么用举个小例子intaintconstpa也可以分开写intaintconstppa当然你也可以定义个一个指向常量的指针常量就把上面的两个综合一下表示如下constinta7constintconstpa下面看几个简单的例子可以说明他们的区别:第一个1voidmain2charstr1Hello3charstr2HelloWorld4charconstptr1str15//指针常量指针本身是常量指向的地址不可以变化但是指向的地址所对应的内容可以变化67ptr1str2//错误因为这是一个常量指针改变指向的地址了89printfsnptr110111213//编译错误errorC3892:ptr1:youcannotassigntoavariablethatisconst14第二个1voidmain2charstr1Hello3charstr2HelloWorld4charconstptr1str15//指针常量指针本身是常量指向的地址不可以变化但是指向的地址所对应的内容可以变化67ptr1A//正确因为指向的地址的内容是可以变化的89printfcnptr1101112//输出A13第三个1voidmain2charstr1Hello3charstr2HelloWorld4constcharptr1str15//常量指针指向字符串常量所指向的字符串内容不能变但是指向的地址可以变化67ptr1str2//正确因为指向的地址是可以变化的89printfsnptr1101112//输出HelloWorld第四个1voidmain2charstr1Hello3charstr2HelloWorld4constcharptr1str25//常量指针指向字符串常量所指向的字符串内容不能变但是指向的地址可以变化67ptr1A//错误因为指向的地址是内容是不可以变化的89printfcnptr110111213//编译错误errorC2440::cannotconvertfromchartoconstchar14相信从上面四个简单的例子可以看出他们不一样的地方把在这里要请大家注意一下的地方是指针常量的申明const放在和指针名之间Typeconstpointer关于记忆技巧对于区分constintpa和intconstpa这两者前者中const直接修饰不考虑int因为类型在这里是没影响的说明解引用这种行为具有常量性即“不能靠解引用改变它指向的对象的值”即指向常量的指针。后者中const直接修饰pa说明pa本身的值具有常量性即常量指针。或者也可以这样来记忆con