C/C++ 易錯

char c[] = "hello world"   分配局部數組

char* c = "hello world"   分配全局數組  全局區域的值是不能進行修改的

 

1 常量指針!如 int b, c; int * const a = &b;
表示a是一個常量指針它指向變量b的內存。但是因爲是常量指針所以不能再用a指向其他變量,如 a = &c; 錯誤!可以修改指向內存的值,如:*a = 20; BTW 常量指針聲明的時候必須向我那樣賦初值。

2 指向常量的指針!如 int b, c; int const *a; a = &b; a = &c;
都可以,唯獨它指向的內存不能被修改。如:*a=20;這是違法的!錯誤!

這就是主要區別!

BTW 還有一個記住他們不同形式的技巧!看const關鍵字,他後面的不可修改,如int * const a = &b; 後面是a,則說明a不能修改!
int const * a = &b;後面是*a則說明*a不可被修改!

在好多書上或MSDN是經常用 const int a=5;
int b=6;
const int *p=&b;
其實 const int* 和int const* 一樣,就是常指針 也就是它所指向的數據(在這是int)是常量,它自己的數據類型是const int*
還有const int *p=&b;是可以的 雖然b不是常量。
但是  const int a=6;
      int *p=&a;
會報錯,因爲它消除了a的const屬性
**********************************************

*******我們可以總結一下********
1.  對於常量(符號常量)和常指針、常引用常對象聲明都是一樣的
定義格式: const 數據類型  常量名=常量值;
或  數據類型 const 常量名=常量值;

例如:const int a=7; 或 int const a=7;(符號常量)
  int b=5; 
const int *p=&b;  或 int const *p=&b;(常指針)
const int &m=b;(常引用)
const Point pt; 或 Point const pt; //常對象不能更新
常指針和常引用在功能上有所限制,就是不能通過他們更改其指向的變量的數據(值)

2. 指針常量
定義格式: 數據類型 *const 指針常量=常量值;
如char ch,*const pch=&ch;(我是一步完成的,你也可以分開)
也就是說這個指針本身是個常量,不可改變,即它所指向的地址是固定的。但,ch是可以改變的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章