C++陣列 字串

Wzline發表於2024-07-13

是什麼:
相同型別元素的集合
寫法:
int example[3]//陣列在宣告大小時必須為常數
陣列名 example是個指標型別 如int*ptr=example;
陣列索引的工作原理:

example[3]//從首地址位置偏移陣列型別大小(int 是 4位元組)乘索引值(4*3)個位元組 
//從當前位元組位置往後讀四個位元組;

可能出現的錯誤:
example[-1]//訪問了不屬於陣列內的記憶體空間,可能會修改到別的變數的值
比如 int a;a的地址是1 example[-1]訪問的地址也是 1 如果更改會把a的值也改掉 。
解決方法:設定安全檢查確保寫的東西不會超出邊界
陣列的建立方法:
int main()
{
int example[5]//在棧上穿件的,出當前作用域時會自動銷燬
int* another=new int[5];//在堆上建立的除非手動銷燬 不然會一直到程式結束;
}

std::array
要引用
寫法:
std::array<型別,數量>陣列名
例如std::array<int,5>another;
對比原始陣列 有.size()方法
會有效能開銷,它會做所有的邊界檢查 也保持了一個整數size(陣列大小);
計算陣列大小的方法:

int size=sizeof(example)/sizeof(int);//計算出整個陣列記憶體多大 在除單個元素記憶體多大 
//得出陣列的元素個數;該方法不怎麼可用最好是自己維護陣列大小

字串

是什麼:
本質是一個接一個的字元的一組字元,指字母符號;
什麼時候用:
想要表示文字或一組文字
書寫習慣:
用的時候加上const
怎樣工作:
字串實際上是字元陣列型別是const char*
注意字串是不可變的
寫法舉例:
const char*name="wzs";//可用strlen()計算長度
實際上字串的全部內容是 wzs\0
\0是空終止符表示0 告訴編譯器碰到空終止符 表示字串已經結束了
寫法2:
引用 < string >
std::string
std::string name="wzs ";
寫法3:
char a[]="wzs hello!";

string 類中有個建構函式接受char或const char引數
" "是字串字面量

計算字串長度大小

strlen()接受char或const char引數
計算的長度不包含空終止符

追加字串

法1:
std::string name="wzs";原理是將const char類的“wzs”解引用內容複製到string型別的name變數中去
name+="hello";//是將一個指標加到了name(是個字串)加到一個字串
+=在string類中被過載了
法2:
std::string name=std::string("wzs")+"hello";//std::string("wzs")呼叫建構函式 //相當於建立了一個string例項
用string類對比其他字串方法
用string類可以呼叫.find()方法
功能:找到字串中的文字 並返回要查詢 文字的首地址;
std::string::npos;//代表一個不存在的位置
法3:
std::string name="wzs"s+"hello!";//這裡的s是個函式 作用是返回標準字串物件
法4:
const char
example=R"wzs\n"
"hello! "

字串字面量

是什麼:
""雙引號之間的一串字元
注意:
是存在記憶體的只讀部分的 什麼情況下都不能修改;

字元型別

const wchar_t
是什麼:
寬字元,兩個位元組的字元,但具體由編譯器決定
例項:
const wchar_tname=L"wzs";//L表示後面的字串字面量由寬字元組成一個字元佔一個位元組;
const char16_t
是什麼:
兩個位元組 也就是16位元,區別於wchar_t 是確定的2位元組不由編譯器自己決定
寫法:
const char16_t
name=u"wzs";

相關文章