iOS開發分分鐘搞定C語言 —— 結構體和枚舉

來源:互聯網
上載者:User

iOS開發分分鐘搞定C語言 —— 結構體和枚舉

一、結構體
在前面的數組分享中,把同一類型的資料進行儲存通過數組,我們可以用數組來表示這個整體,但是數組有個特點:內部的每一個元素都必須是相同類型的資料。那麼如何通過一個方式將不同類型的資料進行儲存呢?
為此,C語言專門提供了一種構造類型來解決上述問題,這就是結構體,它允許內部的元素是不同類型的。

二、結構體的定義
1.先定義結構體類型, 在定義結構體變數
struct student {
int age ;
char *name;
double height;
};
struct student sd;

2.定義結構體類型的同時定義結構體變數
struct student2{
int age;
char *name;
double height;
}sd2;
sd2.age = 16;
sd2.name = “JAMES”;
sd2.height = 1.9;

3.定義結構體類型的同時定義結構體變數, 並且省略結構體名稱
struct {
int age;
char *name;
double height;
}sd3;
sd3.age = 17;
sd3.name = “james”;
sd3.height = 1.88;

定義結構體類型的同時定義結構體變數, 並且省略結構體名稱的注意:
弊端: 由於結構體類型沒有名稱, 所以以後就不能使用該結構體類型
優點: 如果結構體類型只需要使用一次, 那麼可以使用該方式

三、結構體初始化
1.定義的同時初始化
struct student sd = {18,”james”,1.87};
2.先定義後初始化(一次性初始化)
struct student sd2;
sd2 = (struct student){18,”james”,1.98};
3.先定義再初始化(逐個初始化)
struct student sd3;
sd3.name = “james”;
sd3.age = 18;
sd3.height = 1.87;
4.指定將資料賦值給指定的屬性
struct student sd4 = {.height = 1.76,.age = 19,.name = “james”};

四、結構體數組
跟結構體變數一樣,結構體數組也有3種定義方式:
方式一:
struct Student {
char *name;
int age;
};
struct Student stu[5]; //定義1

方式二:
struct Student {
char *name;
int age;
} stu[5]; //定義2

方式三:
struct {
char *name;
int age;
} stu[5]; //定義3

結構體數組的初始化:
truct {
char *name;
int age;
} stu[2] = { {“Jmes”, 21}, {“JJ”, 30} };

五、結構體函數
將結構體變數作為函數參數進行傳遞時,其實傳遞的是全部成員的值,也就是將實參中成員的值一一賦值給對應的形參成員。因此,形參的改變不會影響到實參。相當於拷貝。

// 定義一個結構體
struct Student {
int age;
};
void test(struct Student stu) {
printf(“修改前的形參:%d ”, stu.age);
// 修改實參中的age
stu.age = 10;
printf(“修改後的形參:%d ”, stu.age);
}
int main(int argc, const char * argv[]) {
struct Student stu = {30};
printf(“修改前的實參:%d ”, stu.age);
// 調用test函數
test(stu);
printf(“修改後的實參:%d ”, stu.age);
return 0;
}

六、指向結構體的指標
結構體指標變數的定義形式:struct 結構體名稱 指標變數名*
有了指向結構體的指標,那麼就有3種訪問結構體成員的方式
結構體變數名.成員名
(*指標變數名).成員名
指標變數名->成員名<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKSB7PGJyIC8+DQovLyC2qNLl0ru49r3hubnM5cDg0M08YnIgLz4NCnN0cnVjdCBTdHVkZW50IHs8YnIgLz4NCmNoYXIgKm5hbWU7PGJyIC8+DQppbnQgYWdlOzxiciAvPg0KfTs8YnIgLz4NCi8vILao0uXSu7j2veG5uczlseTBvzxiciAvPg0Kc3RydWN0IFN0dWRlbnQgc3R1ID0geyZsZHF1bztNSiZyZHF1bzssIDI3fTs8YnIgLz4NCi8vILao0uXSu7j21rjP8r3hubnM5bXE1rjV67Hkwb88YnIgLz4NCnN0cnVjdCBTdHVkZW50ICpwOzxiciAvPg0KLy8g1rjP8r3hubnM5bHkwb9zdHU8YnIgLz4NCnAgPSAmYW1wO3N0dTs8YnIgLz4NCi8v1eLKsbryv8nS1NPDM9bWt73KvbfDzsq94bm5zOW1xLPJ1LE8YnIgLz4NCi8vILe9yr0xo7q94bm5zOWx5MG/w/sus8nUscP7PGJyIC8+DQpwcmludGYoJmxkcXVvO25hbWU9JXMsIGFnZSA9ICVkICZyZHF1bzssIHN0dS5uYW1lLCBzdHUuYWdlKTs8YnIgLz4NCi8vILe9yr0yo7ooKta41eux5MG/w/spLrPJ1LHD+zxiciAvPg0KcHJpbnRmKCZsZHF1bztuYW1lPSVzLCBhZ2UgPSAlZCAmcmRxdW87LCAoKnApLm5hbWUsICgqcCkuYWdlKTs8YnIgLz4NCi8vILe9yr0zo7rWuNXrseTBv8P7LSZndDuzydSxw/s8YnIgLz4NCnByaW50ZigmbGRxdW87bmFtZT0lcywgYWdlID0gJWQgJnJkcXVvOywgcC0mZ3Q7bmFtZSwgcC0mZ3Q7YWdlKTs8YnIgLz4NCnJldHVybiAwOzxiciAvPg0KfTwvcD4NCjxwPjxpbWcgYWx0PQ=="這裡寫圖片描述" src="http://www.bkjia.com/uploads/allimg/150805/0423391928-1.png" title="\" />

七、結構體如何開闢儲存空間
看上去, 結構體分配儲存空間是將所有屬性佔用的儲存空間的總和加在一起後再分配
注意:
其實結構體分配儲存空間本質上並不是將所有屬性佔用的儲存空間的總和加在一起後再分配
而是會擷取結構體類型中佔用記憶體最大的屬性的大小, 然後取該大小的倍數
特例:
如果剩餘的儲存空間”不夠”儲存將要儲存的資料, 那麼就會重新開闢8個位元組的儲存空間, 並且將需要儲存的資料放到新開闢的儲存空間中。
如果剩餘的儲存空間”夠”儲存將要儲存的資料, 那麼就不會開闢了。

八、枚舉
枚舉就是專門用於表示幾種固定類型的取值,枚舉的本質就是基礎資料型別 (Elementary Data Type), 就是整型。在iOS開發中是非常常用的。
枚舉類型定義的格式
enum 枚舉類型名稱{
類型1,
類型2,
};
注意:由於枚舉類型的本質是整型, 所以枚舉類型除了可以接收枚舉的固定的取值以外, 還可以接收其它整型的值,枚舉的值預設從0開始依次遞增。
定義枚舉的一般規範:
*(1)枚舉類型的取值一般以k開頭 後面跟上枚舉類型的名稱 跟上當前取值的含義
(2)和結構體一樣, 枚舉類型的名稱首字母大寫*
enum Season
{
kSeasonSpring,
kSeasonSummer,
kSeasonAutumn,
kSeasonWinter
};

 

相關文章

聯繫我們

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

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

Tags Index: