1.指向const對(duì)象的指針
const int *p;
這個(gè)p是一個(gè)指向int類型const對(duì)象的指針,const限定了指針p所指向的類型,而并非p本身。也就是說p本身并不是const。在定義時(shí)不需要對(duì)它進(jìn)行初始化,還可以給p重新賦值,使其指向另一個(gè)const對(duì)象。但不能通過p修改所指向?qū)ο蟮闹怠?br>示例1:int a=0; p=&a; 可以。
示例2:*p=20; 不可以。
結(jié)論:這種指向const對(duì)象的指針只是限制不能修改p指向?qū)ο蟮臄?shù)值,而不是限制p指向什么對(duì)象。
把一個(gè)const對(duì)象的地址賦給一個(gè)不是指向const對(duì)象的指針也是不行的。
示例3:const int b=10;
int *p2=&b; //error
const int *p3=&b; //ok
結(jié)論:因?yàn)樽兞縝有const修飾,不能被修改。但指針p2是一個(gè)普通的指針,可以修改指向?qū)ο蟮闹担瑑煞N聲明矛盾,所以不合法。而指向const對(duì)象的指針不允許修改指針指向?qū)ο蟮臄?shù)值,所以這種方式合法。
2.const指針
int c=20;
int *const p4=&c;
指針p4稱為const指針。它和指向const對(duì)象的指針恰好相反,它不能夠修改所指向?qū)ο螅珔s能夠修改指向?qū)ο蟮臄?shù)值。另外,這種指針在聲明時(shí)必須初始化。
3.指向const對(duì)象的const指針
const int d=30;
const int *const dp=&d;
指針dp既不能修改指向的對(duì)象,也不能修改只想對(duì)象的值。
const int *p;
這個(gè)p是一個(gè)指向int類型const對(duì)象的指針,const限定了指針p所指向的類型,而并非p本身。也就是說p本身并不是const。在定義時(shí)不需要對(duì)它進(jìn)行初始化,還可以給p重新賦值,使其指向另一個(gè)const對(duì)象。但不能通過p修改所指向?qū)ο蟮闹怠?br>示例1:int a=0; p=&a; 可以。
示例2:*p=20; 不可以。
結(jié)論:這種指向const對(duì)象的指針只是限制不能修改p指向?qū)ο蟮臄?shù)值,而不是限制p指向什么對(duì)象。
把一個(gè)const對(duì)象的地址賦給一個(gè)不是指向const對(duì)象的指針也是不行的。
示例3:const int b=10;
int *p2=&b; //error
const int *p3=&b; //ok
結(jié)論:因?yàn)樽兞縝有const修飾,不能被修改。但指針p2是一個(gè)普通的指針,可以修改指向?qū)ο蟮闹担瑑煞N聲明矛盾,所以不合法。而指向const對(duì)象的指針不允許修改指針指向?qū)ο蟮臄?shù)值,所以這種方式合法。
2.const指針
int c=20;
int *const p4=&c;
指針p4稱為const指針。它和指向const對(duì)象的指針恰好相反,它不能夠修改所指向?qū)ο螅珔s能夠修改指向?qū)ο蟮臄?shù)值。另外,這種指針在聲明時(shí)必須初始化。
3.指向const對(duì)象的const指針
const int d=30;
const int *const dp=&d;
指針dp既不能修改指向的對(duì)象,也不能修改只想對(duì)象的值。