1 結構體 柔型陣列以及union

2021-09-24 12:49:24 字數 3079 閱讀 2844

1、結構體:使用者自己建立不同資料型別組成的組合型的資料結構。

struct student  

;struct student student1;

// struct為宣告結構體型別的關鍵字,student為結構體名

// struct student 為乙個結構體型別

// student1為struct student 型別的變數

或者在定義結構體型別的同時定義結構體變數:

struct student  

student1,stuednt2;

比較 struct 和 typedef struct:

typedef struct student            //也可以寫成typedef struct 

stu;

typedef 本質是對已有的型別進行重新命名,對比 typedef int int32,所以在這裡stu 等同於 struct student。這兩個都代表相同的資料型別,就可以用stu代表struct student結構體型別,所以如果要定義結構體變數,直接stu student1即可。(stu 用來定義變數,stu 是型別而不是變數)

但是對於

struct student  

如果我們要定義乙個結構體變數就必須 struct student student1這樣才算定義了乙個結構體變數,因為struct student 才是結構體型別

空結構體:在 vs2015 裡面不允許空結構體的存在,但是在 gcc 編譯器把空結構體的大小定義為0,這是個灰色地帶。

2、柔型陣列

— 柔型陣列即陣列大小待定的陣列

— c語言中可以由結構體產生柔型陣列

— c語言中結構體的最後乙個元素大小未知的陣列

— 柔型陣列所占用的位元組大小僅僅和長度的型別有關

好處:動態決定陣列的長度

#include struct softarray

;int main()

基本格式:

struct softarray

;...

struct softarray* sa = null;

sa = (struct softarray* )malloc(sizeof(struct softarray)+sizeof(int)*5);

sa->len = 5;

例項程式:

#include #include struct softarray

;struct softarray* creat_soft_array(int length)

}return ret;

}void free_soft_array(struct softarray* sa)

void func(struct softarray* sa) }}

int main()

free_soft_array(sa);

return 0;

}

3、c語言中的聯合體 union聯合體裡面可以定義多個成員變數,在任何時刻,只有乙個成員變數有效。union是只分配最大成員的空間,而且所有的成員共享這個空間.

比如說空間裡面已經有乙個 int 值,你乙個 char 的只能是裡面乙個位元組的那個值。

#include struct a

;union b

;int main()

union的注意事項:union的使用受系統大小端的影響,我們一般的電腦系統都是小端系統,union 和 struct 差不多,就是意義不同。

在小端系統裡,1被儲存在低位址上面;

在大端系統裡,1被儲存在高位址上面。

小端模式,低位址儲存低位資料;大端模式,低位址儲存高位資料。

#include union a

a;int main()

分析:10 == 0000 1010;1 ==0000 0001

在小端模式 0000 0001 0000 1010,這樣就是低存低位,所以a.i = 266

在大端模式 0000 1010 0000 0001 0000 0000… 0000 0000,這樣就是低存高位

例題翻**

#include union a

a;int main()

分析:

先已知a.i = 299,也就是256+43,可以清楚的知道,a.c[0] = 43,a.c[1] = 1

如何判別大小端

#include int system_mode()

sm; sm.i = 1;

return sm.c;

}int main()

else

return 0;

}

特殊情況:

原因在於:我初始化了小的記憶體,但是我無法保證 int 裡面的其餘3個位元組都是空的。導致出現得出的結果不是1而出現是大端系統的原因,所以最好初始化大的記憶體 = 1。

Hive中建立結構體 陣列以及map

row format delimited 分隔符設定開始語句 fields terminated by 設定欄位與字段之間的分隔符 collection items terminated by 設定乙個複雜型別 array,struct 欄位的各個item之間的分隔符 map keys termin...

陣列與字串以及結構體還有共用體

1陣列 1.普通宣告和初始化 int nums 3 2.只宣告 int num 3 這樣陣列裡的元素值是未知的 3.只宣告,然後賦值 int num 3 num 0 1 num 1 34 num 2 9 4.文藝青年的初始化 int nums 3 第0個元素賦值為89,其他預設為0 int nums...

c 結構體與函式 陣列 指標綜合案例1

案例1 學校正在做畢設專案,每名老師帶領5個學生,總共有3名老師,需求如何設計學生和老師的結構體,其中在老師的結構體中,有老師姓名和乙個存放5名學生的陣列作為成員,學生的成員有姓名 考試分數,建立陣列存放3名老師,通過函式給每個老師及所帶的學生賦值,最終列印出老師資料以及老師所帶的學生資料。incl...