第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

C 語言入門教程

C 語言基礎(chǔ)教程
01 C 語言簡介 02 C 語言的程序結(jié)構(gòu) 03 C 語言的編譯 04 C 語言的標(biāo)準(zhǔn) 05 C 語言中的注釋 06 C 語言中的變量 07 C 語言中的變量類型 08 C 語言的常量 09 C 語言的輸入與輸出 10 C 語言中的 printf() 格式輸出 11 C 語言中的類型轉(zhuǎn)換 12 C 語言中的運(yùn)算符 13 C 語言中的算數(shù)運(yùn)算符 14 C 語言中的位運(yùn)算符 15 C 語言中的邏輯運(yùn)算符 16 C 語言中的三目運(yùn)算符 17 C 語言中的分支結(jié)構(gòu) 18 C 語言中的多重分支 19 C 語言中的分支嵌套結(jié)構(gòu) 20 C 語言中的循環(huán)結(jié)構(gòu) 21 C 語言中的 while 循環(huán) 22 C 語言中的 do-While 循環(huán) 23 C 語言中的 for 循環(huán) 24 C 語言中的多重循環(huán)嵌套 25 循環(huán)實(shí)戰(zhàn),打印九九乘法表 26 C 語言中的break和continue 27 C 語言中的 if 語句 28 C 語言中的 switch/case 語句 29 C 語言中的函數(shù) 30 C 語言函數(shù)的定義和聲明 31 C 語言中函數(shù)的參數(shù)傳入類型 32 C 語言中的 main() 函數(shù)參數(shù) 33 make 工具 makefile 34 C 語言中的數(shù)組 35 C 語言中的多維數(shù)組 36 數(shù)組的練習(xí) 37 C 語言中的字符串 38 C 語言中的字符串函數(shù) 39 C 語言字符串練習(xí) 40 C 語言中的指針 41 C 語言中的 struct 42 C 語言中的 union 43 C 語言中的 maclloc free() 44 C 語言中的 enum 45 整體練習(xí)-學(xué)生管理系統(tǒng)

C 語言中的 union

由于 C 語言是強(qiáng)類型語言,不能如同某些語言一樣,可以在變量中存儲任意元素。所以在有的時候會遇到一些問題。比如你有一個變量需要存儲計算結(jié)果,計算結(jié)果有時可能是整數(shù),有時可能是浮點(diǎn)數(shù)。這里我們介紹其中可以做到不更改變量名就可以存儲不同類型數(shù)據(jù)的變量。

1. 聲明 union

和之前介紹的 struct 的聲明方式是類似的,通過關(guān)鍵字 union ,以及這個 union 的名稱,還有一系列的變量類型以及名稱。

union Calculation
{
    int i;
    float f;
    char str[100];
};

union Calculation cal1, cal2;

看著結(jié)構(gòu)感覺是不是很熟悉。但是這和 struct 有著本質(zhì)的不同。之前的 struct 是一個集合,里面的變量之間是獨(dú)立的。而這個 union 則正好相反,這不是一個集合,而只是一個特殊的變量,是一個,不是多個。只不過這個變量可以在其聲明包含的這些變量類型之間變化。一次只能有一個內(nèi)部的變量類型被賦值,如果多次賦值,那么最后一次的賦值會覆蓋前面的變量內(nèi)容。

2. 初始化 union

初始化一個 union 和初始化一個變量是一致的,只能初始化里面其中一個值,一般默認(rèn)形式是初始化其中的第一個值。

union Calculation cal1 = 1;

3. 使用 union

使用一個 union 變量需要使用成員訪問符,也就是英文句號 . 。

cal1.i = 1;

4. 示例程序

#include <stdio.h>
#include <string.h>

int main()
{
    union Calculation {
        int i;
        float f;
        char str[100];
    };

    union Calculation cal1 = {1};

    printf("cal1.i: %d, cal1.f: %f, cal1.str: %s\n", cal1.i, cal1.f, cal1.str);

    cal1.f = 0.111;

    printf("cal1.i: %d, cal1.f: %f, cal1.str: %s\n", cal1.i, cal1.f, cal1.str);

    strcpy(cal1.str, "None");

    printf("cal1.i: %d, cal1.f: %f, cal1.str: %s\n", cal1.i, cal1.f, cal1.str);

    return 0;
}

運(yùn)行結(jié)果:

cal1.i: 1, cal1.f: 0.000000, cal1.str: 
cal1.i: 1038308344, cal1.f: 0.111000, cal1.str: S=
cal1.i: 1701736270, cal1.f: 70373527000468267466752.000000, cal1.str: None

在這個示例中我們展示了其用法??梢钥吹匠跏蓟臅r候只能給第一種類型的變量賦值,后面的每次賦值都會覆蓋其他類型的值。所以只有最后一次的賦值的類型是可以使用的。這和之前介紹的 struct 是完全不同的。

5. 小結(jié)

到這里可能有些同學(xué)不解其中緣由,其實(shí)不復(fù)雜,主要是兩個在內(nèi)存的存儲分配上是不同的。之前的 struct 是給每一種類型的變量都存儲的存儲空間,而 union 則只是按照類型里需要內(nèi)存最多的類型分配了一個內(nèi)存存儲位置。因?yàn)橹挥幸粋€存儲位置,所以就會出現(xiàn)后面的會覆蓋掉之前存儲的內(nèi)容的情況。