1. 程式人生 > >【C++】const char* 和char* 之間的轉換

【C++】const char* 和char* 之間的轉換

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就不再是指向常量的指標了。