【C++】const char* 和char* 之間的轉換
阿新 • • 發佈:2018-12-22
const char*是指向常量的指標,而不是指標本身為常量,可以不被初始化.該指標可以指向常量也可以指向變數,只是從該指標的角度而言,它所指向的是常量,
通過該指標不能修改它所指向的資料.
1.const char*是不能直接賦值到char*的,這樣編譯都不能通過,理由:假如可以的話,那麼通過char*就可以修改const char指向的內容了,這是不允許的.所以char*要另外開闢新的空間。
#include <iostream> using namespace std; int main(){ const char* cpc="abcde"; char* pc=new char[100]; strcpy(pc,cpc); cout<<pc<<endl; return 0; }
2.char*到 const char*直接賦值就可以了
#include "iostream" #include "string" using namespace std; int main() { const char* cpc; char* pc="abcde"; //pc[1] = '2';這種操作是不行的,根本沒有這種字串的操作,而不是因為const的原因 cpc=pc; pc = "123"; cout << cpc << endl; cout << pc << endl; return 0; }
結果為:
小結:cpc指向了"abcde",然後將指標賦值給了pc,這時對cpc進行了修改,相當於cpc重新指向了新的常量"123",但這時pc還是指向"abcde"沒有改變。
二、指標常量,常量指標
1. 什麼是指標常量?指標常量即指標型別的常量。
例:char *const name1="John";
name1="abc"; //錯誤,name1指標,不能變,一個指標型別的變數,存放的是地址,所以不能把'"abc"的地址賦給name1
char * name2= name1; //可以
2. 什麼是常量指標?常量指標即是指向常量的指標,指標的值可以改變,指標所指的地址中的內容為常量不能改變,
例:const char *name1="John";
char s[]="abc"; name1=s; //正確,name1存放的地址可以改變
char * name2= name1; //不可以,因為name2 和 name1存放的是同一塊地址,如果name2地址中的內容改了,則name1的內容也改了,那麼name1就不再是指向常量的指標了。