程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> const char*、char*、char* const、char[]、string的區別

const char*、char*、char* const、char[]、string的區別

編輯:C++入門知識

1、const char* p: p is a pointer to const char(char const* p 一樣)
   意思就是不能通過p指針來修改p指向的內容(但是內容可以修改)。

2、char* p      : p is a pointer to char
   意思就是可通過p指針來修改p指向的內容

3、char* const p: p is a const pointer to char
   意思就是p指針是一個常指針,他指向的內存地址不能變,定義的時候就得初始化
   一旦給指針p賦了值,就不能再對他進行賦值操作,但是可以通過他修改他指向的
   內存地址中的值。

4、char p[size] :p is a const pointer to char
   意思就是p指針是一個常指針,當定義字符數組時,系統就為他分配了地址空間,
   p指針指向的地址是不能變的。但可以通過他修改其指向的內存空間中的值。當要
   通過P指針修改其內容時,只能通過傳值的方式,不能通過傳地址的方式。

5、string: C++的一個字符串類,他可以進行c版本字符串不允許的許多操作比如+ -,
    > < ==(比較,返回bool值)等操作。

賦值
1、const char* -> char*
1) strcpy(char*,const char*)這是一種拷貝的方法,a和b指向的地址不一樣
char* a;
a = (char*)malloc(20);
const char* b = "zhangnianyong";
strcpy(a,b);

2)strcpy(char*,const char*)和上面一樣
char* a = new char;
memset(a,0,20);
const char* b = "zhangnianyong";
strcpy(a,b);

   3)強制轉換
const char* b = "zhangnianyong";
char* a = (char*)b;
這種方式a和b指向的地址一樣,可以通過指針a修改其內容,但是不能通
過指針b修改其內容。通過指針a修改其內容後,指針b指向的內容也發生
變化。

2、char* ->const char*
1)直接賦值
char* a;
const char* b = a;
這樣指針a和指針b的指向的地址一樣,可以通過指針a修改其內容,但是不
能通過指針b修改其內容,通過指針a修改其內容後,指針b指向的地址空間
的內容也發生了變化。

3、const char* -> char* const
1)強制轉換
const char* b;
char* const a = (char*)b;
這種方式a和b指向的地址一樣,可以通過指針a修改其內容,但是不能通過
指針b修改其內容。通過指針a修改其內容後,指針b指向的內容也發生變化。

4、char* const ->const char*
1)直接賦值
char a[5] = "zhang";
char* const b = a;
const char* c = b;
這種方式b和c指向的地址一樣,可通過指針b修改其內容,但是不能通過指
針c來修改其內容。通過指針b修改其內容後,指針c指向的內容也發生變化。


5、char[] -> const char*、char*、char* const
1)直接賦值
char a[5] = "zhang";
const char* b = a;
char* c = a;
char* const d = a;
這種方式指針a和其他類型指針指向的地址是一樣的,可以通過指針a修改來
修改其內容,如: a[i] = 'a'。

6、const char*、char*、char* const -> char[]
1)strcpy(char* const char*)
char a[20] = {0};
const char* b = "zhangnianyong";
char* const c = "zhangnianyong";
char* d       = "zhangnianyong";
strcpy(a,b/c/d);
通過拷貝的方式,

2)memcpy(void*, const void*, size)

7、char[] -> string
char a[20] = {0};
string b;
b = a;

8、char* -> string
char *a;
a = (char*)malloc(15);
string b;
strcpy(a,"zhangnianyong");
b = a;

9、const char* -> string;
const char* a;
string b;
b =a;

10、char* const -> string
char* const a;
string b;
b = a;
注意: char[]、const char*、char*、char* const -> string,直接賦值

11、string -> const char*
string a;
const char* b;
b = a.c_str();
12、string -> char[]、char*、char* const
只要通過中間變量const char*就可以了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved