c語言結構體

2021-08-28 09:49:54 字數 4204 閱讀 8429

結構體(structre)

使用者自己建立資料型別

學會模擬

1.什麼是結構體

簡單一點理解 ,就是把多個不同的型別的變數構做乙個結構了,再自己給這個變數重新命名

2.結構體型別的宣告

關鍵字 struct

struct person---- 模擬成int

//結構體型別的名字(person)首字母要大寫

屬性(成員)

int id;

char ***;

char name[10];

};//結構體型別

struct person

;//結構體型別的宣告 struct person 相當於 int

int a;

結構體型別 int

結構體變數 a

//關於時間的結構體型別

struct date

;//關於人資訊的結構體型別

struct person

;struct person zhangsan;

struct date 其中date叫做結構體的名字

3.成員可以屬於另乙個結構體型別。(巢狀)

struct date birthday;//書寫格式

birthday裡面有成員month,year ,day

struct date

;struct student

;

4.先宣告結構體型別,再定義該型別的變數

宣告結構體型別

格式:struct 結構體的名字(person)

成員列表(屬性)

int id;

定義結構體的變數

struct 結構體名字 變數名字

5.位元組的計算

6.定義結構體變數

結構體型別和結構體變數區別

結構體變數的書寫:

struct person

zhangsan,lisi;

//在宣告結構體型別的時候,可以順便定義結構體變數

在宣告結構體型別的時候,可以順便定義結構體變數

struct person

;//宣告結構體型別

struct person zhangsan,lisi;//定義結構體的變數

先宣告結構體型別

後定義結構體的變數

7.結構體變數初始化

普通的初始化

#includeint main()

zhangsan=,lisi=;

//初始化

printf("%d\n%s\n%d\n%c\n%s\n",zhangsan.id,zhangsan.name,zhangsan.age,zhangsan.***,zhangsan.addr);

return 0;

}

宣告的時候,定義了,又初始化了

zhangsan=,lisi=;它是按照結構體型別成員裡面出現的順序一一對應賦值的

利用陣列初始化

#includeint main()

student[2]=,};

printf("%d\n%s\n%d\n%c\n%s\n",student[0].id,student[0].name,student[0].age,student[0].***,student[0].addr);

return 0;

}

注意:

§ 不能整體輸出輸入(結構體變數),只能乙個乙個成員的輸出輸入

§ 結構體變數可以相互賦值(同類)

§ 結構體變數中的成員可以進行運算

§ 利用scanf對變數成員初始化,但不能用&整體初始化

這是在控制台輸入的格式:1001 zhangsan 12m 1001street

#includeint main()

zhangsan,lisi;

//scanf("%d%s%d%c%s",&lisi);不可以的

scanf("%d%s%d%c%s",&zhangsan.id,zhangsan.name,&zhangsan.age,&zhangsan.***,zhangsan.addr);

//陣列的名字就是位址

//scanf("%s",zhangsan.addr);

lisi = zhangsan;//變數之間的賦值 變數》成員

lisi.age = zhangsan.age;//成員之間的賦值

zhangsan.age = zhangsan.age+100;

printf("%d\t%s\t%d\t%c\t%s\t",zhangsan.id,zhangsan.name,zhangsan.age,zhangsan.***,zhangsan.addr);

//printf("%d%s%d%c%s",zhangsan);

return 0;

}

8.結構體指標

struct person *pt;

student[2]=,};

struct person *p;

p=student;

for(;pid,p->name,p->age,p->***,p->addr);

}return 0;

}

//int *p;

p=&zhangsan;

(*p).age;

(*p)表示p指向的結構體變數(zhangsan),(*p).age表示指向的結構體變數的成員

§ printf("%d\t%s\t%d\t%c\t%s\n",(*p).id,(*p).name,(*p).age,(*p).***,(*p).addr);

§ printf("%d\t%s\t%d\t%c\t%s\n",p->id,p->name,p->age,p->***,p->addr);

這兩種是等價的,只是書寫格式不一樣而已

l printf("%d\t%s\t%d\t%c\t%s\n",zhangsan.id,zhangsan.name,zhangsan.age,zhangsan.***,zhang)這種是最原始的

(普通的結構體指標)

#includeint main()

zhangsan,lisi;

struct person *p;//定義了乙個指向結構體型別的指標

scanf("%d%s%d%c%s",&zhangsan.id,zhangsan.name,&zhangsan.age,&zhangsan.***,zhangsan.addr);

p=&zhangsan;

printf("%d\t%s\t%d\t%c\t%s\n",zhangsan.id,zhangsan.name,zhangsan.age,zhangsan.***,zhangsan.addr);

printf("%d\t%s\t%d\t%c\t%s\n",(*p).id,(*p).name,(*p).age,(*p).***,(*p).addr);

//(*p)表示p指向的結構體變數,(*p).age表示指向的結構體變數的成員

printf("%d\t%s\t%d\t%c\t%s\n",p->id,p->name,p->age,p->***,p->addr);

return 0;

}

(陣列,指標,結構體)

#includeint main()

student[2]=,};

struct person *p;

p=student;

for(;pid,p->name,p->age,p->***,p->addr);

} return 0;

}

結構體指標和函式

struct person

student[2];

#includeint main()

return 0;

}void input(struct person stu)

}

C語言結構體

1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...

C語言 結構體

宣告乙個結構體型別 struct 結構體名 成員表列 定義結構體變數的方法 1 先宣告結構體型別再定義變數名。在定義了結構體變數後,系統會為之分配記憶體單元.例如 struct student student1,student2 2 在宣告型別的同時定義變數,例如 struct 結構體名 成員表列 ...

c語言 結構體

1 定義結構體 c語言允許使用者自己建立不同型別資料組成的組合型的資料結構 struct 結構體名 1 結構體的型別不是只有一種,可以根據需要設計許多種,如struct student struct worker等 2 結構體的成員可以是另一結構體的成員,注意的是引用此成員的方式 2 定義結構體變數...