首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

const指针跟引用的一些疑问

2013-07-01 
const指针和引用的一些疑问对于const修饰在不同的位置有不同的意思,我在网上看到的总结如下如果const位于*

const指针和引用的一些疑问
对于const修饰在不同的位置有不同的意思,我在网上看到的总结如下

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

可是上面的规则好像不适用于这样的声明

(1)指针本身是常量不可变
     (char*) const pContent; 
     const (char*) pContent; 


一个const在*左侧,一个const在*右侧,但是因为有括号所以还是一样的

另外,如果对于&引用类型,这样的规则是否也一样呢?
[解决办法]
你加了括号,你网上看到的应该是下面的意思
char const *a;//等同于const char *a;
char * const a;//

我写成const (char*)a;
编译通不过
[解决办法]
C++ 中的引用本来就是const 的,是已经初始化就不可改变的(不可以再重新指向另一个对象)。
[解决办法]
引用:
对于const修饰在不同的位置有不同的意思,我在网上看到的总结如下

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

可是上面的规则好像不适用于这样的声明
(1)指针本身是常量不可变
     (char*) const pContent; 
     const (char*) pContent; 


一个const在*左侧,一个const在*右侧,但是因为有括号所以还是一样的

另外,如果对于&引用类型,这样的规则是否也一样呢?


这种带括号的写法不多见哦
请问是哪里看到的?我的VC编译是报错的!!!
引用在const左边是语法错误...
[解决办法]
   const char p[11]="1234567890";
   const char q[11]="1234567890";

   char a[]="1234567890";
   char b[]="1234567890";

1) char* const pContent=a; //指针常量,指针不能改变,只能指向a.
2) const char* pContent; //常量指针,所指对象是常量,不能被这个指针改变.
3) char const * pContent; //常量指针,所指对象是常量,不能被这个指针改变.
4) const char* const pContent= p;//常量指针常量,指针何所之对象,都是常量,都不能改变.
  // 其中所指对象相对于指针是常量,不会被这个指针所改变.

对于 1) 如果有 *pContent='a'; 则a[]=="a234567890"; 
对于2),3) 有 2)<==>3) 像 pContent =p;pContent =q; 这个没有问题 *pContent='a'; 不行的,这是错误的;
对于 4) pContent =p;pContent =q;  *pContent='a'; 任何一个都不行,都是是错误的;

至于引用
5)const char &ref =a[0]; 
6)const char &ref const =a[0]; 
7)char const &ref =a[0]; 
8)char const &ref const =a[0]; 
9)char &ref =a[0];
5)和6),7),8)是等价的,因为引用,不可以更换引用的对象,本身就相当于常量。
一个引用,一经定义,就只能引用那个对象了。不会更换所引用的对象了。

定义没有初始化的引用是个错误,编译器会毫不客气的,跟你说你错了,引用必须初始化。
ref ='a' 对于 5),6),7),8) 定义的常量引用,是错误的;
对于9)这样的引用,就相当于a[0]='a';

引用从概念上说,任何时候都相当于,所引用的对象本身。
&前面有const;表示该引用不可以改变引用的对象;
&前面无const,表示可以改变引用的对象。
虽然引用是用指针实现的,却和指针有着完全不同的含义。

指针代表的是一个地址,指针的值,是所指对象的地址;

引用代表所引用的对象,从

地址到值,都和所引用的对象一致










   

热点排行