C++基礎入門教程(三):數(shù)組、字符串、結構體、共用體
今天的標題取得..好嚴肅的感覺。(小若:咳噗)
這章的內(nèi)容雖然還是很詳(lao)細(dao),但已經(jīng)開始有很多值得記錄的內(nèi)容了~
那么,今天就來初次介紹數(shù)組與字符串…以及結構體..還有共用體..吧。
1.數(shù)組
我記得大四實習的時候,請教同事:“什么是屬主?”(其實是和數(shù)據(jù)庫相關的東西)
然后同事驚訝地說道:“啊,你連數(shù)組都不知道..這,基礎還是要好好補補…吶,數(shù)組的意思呢,是這樣的…”
我聽著聽著就不對勁,“等等,這是數(shù)組…其實我是問這個屬主…”
然后同事松了一口氣,估計心里在想,“唉,嚇死我,我以為來了個渾水摸魚的實習生了”。
等等,我好像跑題了。
那么,數(shù)組這么簡單,我是不可能給大家介紹的了。
隨便說說它的聲明和初始化吧,如下代碼:
// 1.普通人的聲明和初始化
int nums[3] = {25, 65, 4};
// 2.只聲明
int num[3]; // 這樣數(shù)組里的元素值是未知的
// 3.只聲明,然后賦值
int num[3];
num[0] = 1;
num[1] = 34;
num[3] = 9;
// 4.文藝青年的初始化
int nums[3] = {89}; // 第0個元素賦值為89,其他默認為0
int nums[3] = {}; // 所有元素的值都為0
// 5.非主流青年的初始化
int nums[] = {1,2,3,4,5}; // 不指定大小,由后面的賦值內(nèi)容決定數(shù)組大小,書上說不推薦,我本人不評價~
// 6.新人類的初始化(C++11)
int nums[3] {1, 2, 3}; // 省略了等號
代碼里已經(jīng)把大部分的情況都列出來了~
關于第3條的第二種,其實也是C++11的新特性。
最后,對于第6條這種的話,也是C++11的新東西,我個人不太喜歡~
這可能會讓不熟悉C++的人覺得很生疏(比如別人只是迫不得已要看一段C++代碼,結果出來了這句,可能會一下子蒙?。?。
而其他的形式即使沒有學過C++的人也能很輕易地知道這是在定義一個數(shù)組。(好吧,隨便說說的)
2.字符串
字符串有兩種,一種是C風格的字符串,另一種是string(可以說是一個類了)
C風格字符串和數(shù)組很像,如下代碼:
// 1.聰明人的初始化
char name[] = "mutou";
// 2.笨蛋的初始化
char name[6] = "mutou";
// 3.蛇精病的初始化
char name[6] = {'m', 'u', 't', 'o', 'u', '\0'};
這種風格的字符串就相當于char類型的數(shù)組了,但是它需要在最后加一個'\0'作為結束符(學過C的都知道喇)
我想,正常人都會使用第一種方式的(除非特殊情況?我還真不知道),”mutou”稱之為字符串常量,后面會自動給數(shù)組補上一個'\0'符號的。
接著就是string字符串了,使用方式如下:
// 1.先聲明,再初始化
std::string name;
name = "mutou";
// 2.聲明和初始化
std::string name = "mutou";
// 3.復制其他字符串內(nèi)容
std::string name1 = "mutou;
std::string name2 = "hello";
name1 = name2; // 此時name1為"mutou"
name2 = "nihao"; // 此時name2為"nihao",name1仍然為"mutou"
// 4.連接字符串
std::string name = "mutou";
name += "hehe";
string在頭文件string里,所以使用的時候要加上 #include <string>。
并且它屬于命名空間std,所以也要加上std::
string字符串用起來很舒服,就像是本就該這么用的那種感覺~
如果使用C風格字符串,那么,復制字符串和連接字符串都會變得很麻煩(需要使用strcpy和strcat函數(shù)來完成)
3.原始字符串
還有一個比較有意思的字符串,叫做原始字符串。
我們都知道,字符串是用雙引號來包圍的,如果要在字符串中出現(xiàn)其他雙引號,就要用轉義字符\。
而使用原始字符串就可以避免這種麻煩,如下代碼:
std::string name1 = R"("mutou")";
std::string name2 = R"*(("mutou"))*";
std::cout << name1.c_str() << "\n";
std::cout << name2.c_str() << "\n";
輸出結果如下:
“mutou”
(“mutou”)
使用R開頭,再用“(和)”符號把字符串包圍起來,那么,中間的字符串就可以使用雙引號等原本需要轉義的字符了。
那么,name2字符串又是怎么回事呢?這是為了解決惡性循環(huán)的問題——如何在原始字符串里使用額外的 ( 字符呢?
于是,我們可以在“(中間添加一個*號,在)”中間也添加一個*,也就是變成這樣:R”*(…..中間很多字符串….)*”
于是就可以在字符串中間使用 ( 等字符了。
其實不一定得加*號,可以加其他東西,而且可以加好幾個,隨你喜歡,但也有限制,不能加空格、左右括號、斜杠和控制字符。
4.結構體
結構體應該算是類的前身吧~
比較簡單,不多說了,隨便看看:
// 定義
struct BadMan
{
char name[]; // 也可以使用 std::string name; 但可能有些編譯器不支持
int age;
long money;
};
// 使用
BadMan man1 =
{
"mutou",
18,
99999999
};
man1.money = 88888888;
好吧,不多說了~
5.共用體
人格分裂聽過嗎?
沒聽過吧~人格分裂就是好幾個人的靈魂存在于同一個身體里,同時只能有一個靈魂在控制身體。(小若:瞎說~?。?br />
C++也有這樣的東西,那就是共用體,看代碼:
union ManyOne
{
int age;
long money;
float girl;
};
ManyOne mOne;
mOne.age = 25;
std::cout << mOne.age << "\n\n";
mOne.money = 999990;
std::cout << mOne.age << "\n";
std::cout << mOne.money << "\n";
輸出結果是:
25
999990
999990
共用體和struct很像,唯一有一點區(qū)別,那就是,共用體里的屬性只能同時存在一個。
比如剛剛的代碼,雖然age在之前賦值為25,但是一旦給其他屬性賦值,那么age的值將不被保留。
因為他們使用的是同一個空間,這點要記住。
因為共用體的所有屬性都是使用一個存儲空間的,所以共用體占內(nèi)存的大小是以需要最大存儲空間的成員為準的。
也許第一次聽說共用體的人會迷糊,其實共用體可以想象成是一個變量有多個名字,我們可以用不同的名字去使用它們。
只不過,這不同的名字有著不相同的類型擺了。
6.結束
嗯,這本書實在是太詳(lao)細(dao)了,第四章還在繼續(xù)進行中。(小若:你覺得和你比起來,誰更嘮叨?)
上一篇:c++幾種基本的插入排序(圖文)
欄 目:C語言
下一篇:C++基礎入門教程(九):函數(shù)指針之回調(diào)
本文標題:C++基礎入門教程(三):數(shù)組、字符串、結構體、共用體
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3192.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關鍵字含義
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實現(xiàn)與遞歸實現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關鍵字的使用詳解
- 01-10深入C/C++浮點數(shù)在內(nèi)存中的存儲方式詳解
- 01-10深入理解C/C++混合編程


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實例總結
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10使用C語言求解撲克牌的順子及n個骰子