結構體(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 定義結構體變數...