c語言基礎筆記DAY7_結構體共用體列舉

CodeFakeMaker發表於2020-12-04

c語言基礎筆記DAY7_結構體共用體列舉

struct結構體

struct people
{
    char name[128];
    int age;
    int height;
}a,b;

struct people c = {"Mike",28,178};
struct people d = {.age = 20};		//給部分成員初始化
  • struct people是型別 , 沒有申請記憶體空間 , 所以不能在定義時給成員變數賦值
  • d=c;是可以的. 相同型別的變數可以賦值

共用體(聯合體)

  • 聯合union是一個能在同一個儲存空間儲存不同型別資料的型別;

  • 聯合體所佔的記憶體長度等於其最長成員的長度倍數,也有叫做共用體;

  • 同一記憶體段可以用來存放幾種不同型別的成員,但每一瞬時只有一種起作用;

  • 共用體變數中起作用的成員是最後一次存放的成員,在存入一個新的成員後原有的成員的值會被覆蓋;

  • 共用體變數的地址和它的各成員的地址都是同一地址。

#include <stdio.h>

//共用體也叫聯合體 
union Test
{
	unsigned char a;
	unsigned int b;
	unsigned short c;
};

int main()
{
	//定義共用體變數
	union Test tmp;

	//1、所有成員的首地址是一樣的
	printf("%p, %p, %p\n", &(tmp.a), &(tmp.b), &(tmp.c));

	//2、共用體大小為最大成員型別的大小
	printf("%lu\n", sizeof(union Test));

	//3、一個成員賦值,會影響另外的成員
	//左邊是高位,右邊是低位
	//低位放低地址,高位放高地址
	tmp.b = 0x44332211;

	printf("%x\n", tmp.a); //11
	printf("%x\n", tmp.c); //2211

	tmp.a = 0x00;
	printf("short: %x\n", tmp.c); //2200
	printf("int: %x\n", tmp.b); //44332200

	return 0;
}

引申

大小端

小端: 低位存低地址記憶體

大端: 高位存低地址記憶體

  • 大型伺服器與網路資料 大端
  • 小型的計算機 小端

列舉

  • 列舉:將變數的值一一列舉出來,變數的值只限於列舉出來的值的範圍內。
列舉型別定義:

enum 列舉名

{

​ 列舉值表

};

  • 在列舉值表中應列出所有可用值,也稱為列舉元素。

  • 列舉值是常量,不能在程式中用賦值語句再對它賦值。

  • 舉元素本身由系統定義了一個表示序號的數值從0開始順序定義為0,1,2 …

#include <stdio.h>
enum weekday
{
​    sun = 2, mon, tue, wed, thu, fri, sat
} ;

enum bool
{
​    flase, true
};

int *main*()

{
​    enum weekday a, b, c;
​    a = sun;
​    b = mon;
​    c = tue;
​    *printf*("%d,%d,%d\n", a, b, c);
​    enum bool flag;
​    flag = true;
​    if (flag == 1)
​    {
​       *printf*("flag為真\n");
​    }
​    return 0;
}

相關文章