C++基礎入門教程(三):數組、字串、結構體、共用體_C 語言

來源:互聯網
上載者:User

今天的標題取得..好嚴肅的感覺。(小若:咳噗)

這章的內容雖然還是很詳(lao)細(dao),但已經開始有很多值得記錄的內容了~
那麼,今天就來初次介紹數組與字串…以及結構體..還有共用體..吧。

1.數組

我記得大四實習的時候,請教同事:“什麼是屬主?”(其實是和資料庫相關的東西)
然後同事驚訝地說道:“啊,你連數組都不知道..這,基礎還是要好好補補…呐,數組的意思呢,是這樣的…”
我聽著聽著就不對勁,“等等,這是數組…其實我是問這個屬主…”
然後同事鬆了一口氣,估計心裡在想,“唉,嚇死我,我以為來了個渾水摸魚的實習生了”。
 
等等,我好像跑題了。
那麼,數組這麼簡單,我是不可能給大家介紹的了。
隨便說說它的聲明和初始化吧,如下代碼:

複製代碼 代碼如下:

// 1.普通人的聲明和初始化
int nums[3] = {25, 65, 4};
// 2.只聲明
int num[3];  // 這樣數組裡的元素值是未知的
// 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}; // 不指定大小,由後面的賦值內容決定數組大小,書上說不推薦,我本人不評價~
// 6.新人類的初始化(C++11)
int nums[3] {1, 2, 3}; // 省略了等號

代碼裡已經把大部分的情況都列出來了~
關於第3條的第二種,其實也是C++11的新特性。
 
最後,對於第6條這種的話,也是C++11的新東西,我個人不太喜歡~
這可能會讓不熟悉C++的人覺得很生疏(比如別人只是迫不得已要看一段C++代碼,結果出來了這句,可能會一下子蒙住)。
而其他的形式即使沒有學過C++的人也能很輕易地知道這是在定義一個數組。(好吧,隨便說說的)

2.字串

字串有兩種,一種是C風格的字串,另一種是string(可以說是一個類了)
C風格字串和數組很像,如下代碼:

複製代碼 代碼如下:

// 1.聰明人的初始化
char name[] = "mutou";
// 2.笨蛋的初始化
char name[6] = "mutou";
// 3.蛇精病的初始化
char name[6] = {'m', 'u', 't', 'o', 'u', '\0'};

這種風格的字串就相當於char類型的數組了,但是它需要在最後加一個'\0'作為結束符(學過C的都知道喇)

我想,正常人都會使用第一種方式的(除非特殊情況?我還真不知道),”mutou”稱之為字串常量,後面會自動給數組補上一個'\0'符號的。

接著就是string字串了,使用方式如下:

複製代碼 代碼如下:

// 1.先聲明,再初始化
std::string name;
name = "mutou";
// 2.聲明和初始化
std::string name = "mutou";
// 3.複製其他字串內容
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函數來完成)

3.原始字串

還有一個比較有意思的字串,叫做原始字串。
我們都知道,字串是用雙引號來包圍的,如果要在字串中出現其他雙引號,就要用逸出字元\。
而使用原始字串就可以避免這種麻煩,如下代碼:

複製代碼 代碼如下:

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字串又是怎麼回事呢?這是為瞭解決惡性迴圈的問題——如何在原始字串裡使用額外的 ( 字元呢?
於是,我們可以在“(中間添加一個*號,在)”中間也添加一個*,也就是變成這樣:R”*(…..中間很多字串….)*”
於是就可以在字串中間使用 ( 等字元了。
其實不一定得加*號,可以加其他東西,而且可以加好幾個,隨你喜歡,但也有限制,不能加空格、左右括弧、斜杠和控制字元。

4.結構體

結構體應該算是類的前身吧~
比較簡單,不多說了,隨便看看:

複製代碼 代碼如下:

// 定義
struct BadMan
{
    char name[]; // 也可以使用 std::string name; 但可能有些編譯器不支援
    int age;
    long money;
};
// 使用
BadMan man1 =
{
    "mutou",
    18,
    99999999
};
man1.money = 88888888;

好吧,不多說了~

5.共用體

人格分裂聽過嗎?
沒聽過吧~人格分裂就是好幾個人的靈魂存在於同一個身體裡,同時只能有一個靈魂在控制身體。(小若:瞎說~!)
 
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很像,唯一有一點區別,那就是,共用體裡的屬性只能同時存在一個。

比如剛剛的代碼,雖然age在之前賦值為25,但是一旦給其他屬性賦值,那麼age的值將不被保留。
因為他們使用的是同一個空間,這點要記住。

因為共用體的所有屬性都是使用一個儲存空間的,所以共用體占記憶體的大小是以需要最大儲存空間的成員為準的。
 
也許第一次聽說共用體的人會迷糊,其實共用體可以想象成是一個變數有多個名字,我們可以用不同的名字去使用它們。

只不過,這不同的名字有著不相同的類型擺了。

6.結束

嗯,這本書實在是太詳(lao)細(dao)了,第四章還在繼續進行中。(小若:你覺得和你比起來,誰更嘮叨?)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.