簡而言之:
char是指針太颤,char[]是數(shù)組苞俘。指針和數(shù)組是不一樣的。數(shù)組是一系列連續(xù)的對象龄章,而指針保存對象的地址苗胀。
例外:但在函數(shù)參數(shù)列表中,char和char[]是等價的瓦堵。
1. char*
char* str="abc"
上面的聲明創(chuàng)建了兩個對象:
- 一個只讀的數(shù)組對象基协,數(shù)組包含了4個char:'a','b'菇用,'c'澜驮,'\0'。這些char沒有變量名惋鸥,并且在整個程序運行過程中都存在著杂穷。一般都存在程序的"text"段中。
- 一個指向char的指針str卦绣。它初始化為指向'a'耐量。
字符串是一個指針,指針指向字符串常量滤港。str會指向一塊只讀的內(nèi)存廊蜒,內(nèi)存里存放著"abc"字符串趴拧。
優(yōu)點:
- 內(nèi)存使用更高效,只需要一個指針指向某一塊內(nèi)存就可以了山叮。
- 不需要提前聲明字符串大小著榴。
缺點:
- 這是一種C語言的寫法,在C++中不能這么用屁倔。在C中字符串是char的數(shù)組脑又,但是在C++中字符串是字符常量的數(shù)組(const char[]),因此要用
const char* str="abc"
2. char[]
char str[] = "abc";
str[0] = 'A';
上面的聲明锐借,創(chuàng)建了一個char的str數(shù)組(數(shù)組大小為4)问麸,并初始化為:'a','b'钞翔,'c'口叙,'\0'
char[]
的做法是將字符串放到只讀內(nèi)存中,然后拷貝字符串到堆中嗅战。因此可以對字符串修改妄田。
sizeof(str)
- char* : sizeof()為指針大小
-
char[]: sizeof()為數(shù)組大小
3. char*和char[]作為函數(shù)參數(shù)
void func(char *x)
和
void func(char x[])
是等價的。
我的簡書:char* char[] 在c++中的區(qū)別
CSDN:char* char[] 在c++中的區(qū)別
微信公眾號:char* char[] 在c++中的區(qū)別