常量指針,“常量的指針”,它(指針)指向常量,而本身(即其地址)非常量。
指針常量,“指針的常量”,它(指針)本身是常量 ,而指向的東西并非常量。
呼呼 ... 說的還不是很清楚哦 ,是吧。還就來看看代碼吧 !
#include <iostream>
#include <string>

using namespace std;
int main(int argc,char* argv[])
{
// ---- test const ptr and ptr const 常量指針與指針常量
const char c = 'a' ;
cout << "const char c = 'a' ,c : " << c << endl ;
char *pchar = const_cast<char*>(&c) ;
*pchar = 'A' ;
//c = 'A' ;
cout << "*pchar(c) = 'A' ; ,c : " << c << endl ;
cout << "*pchar(c) = 'A' ; ,*pchar : " << *pchar << endl ;
const char* const_ptr = "const_ptr" ; //常量指針 -- 指針所指的值不能改變
char temp[] = "ptr_const" ;
char* const ptr_const = temp ; // 指針常量 -- 指針的值(即地址)不能改變
const_ptr = "Const_ptr" ; // --OK !
// const_ptr[0] = 'C' ; //but error ,[C++ Error] E2024 Cannot modify a const object
ptr_const[0] = 'P' ; // --- OK !
// ptr_const = "Ptr_const" ; //but error ,[C++ Error] E2024 Cannot modify a const object
cout << "const_ptr :" << const_ptr <<endl ;

cout << "ptr_const :" << ptr_const << endl ;
string str = "String" ;
cout << str << endl ;
const_ptr = str.c_str() ;
//const_ptr[0] = 's' ; //error--Cannot modify a const object
cout << const_ptr << endl ; // ---
str[0] = 's' ; // change OK ---
cout << const_ptr << endl ; // --- 間接更改 ---

/**//************************************************************/
cout << "\n\n\n\n Hello ,World !" <<endl ;
system("pause");
return 0;
}
輸出結果:
const char c = 'a' ,c : a
*pchar(c) = 'A' ; ,c : a
*pchar(c) = 'A' ; ,*pchar : A
const_ptr :Const_ptr
ptr_const :Ptr_const
String
String
string
Hello ,World !
請按任意鍵繼續(xù). . .
還有一點: “常量指針常量” --- const Type* const Ptr ;// Ptr 即以上所述二者之合 。
若是你有過疑惑,那就上機試試揣摩一下,就會搞定的 !