一:結構體宣告
typedef struct 結構體名
結構體別名;
如:typedef struct stu
stu;
二:結構體變數定義
結構體變數:由結構體型別修飾的變數,稱為結構體變數
定義格式:(1)struct 結構體名 變數名=;
(2)結構體別名 變數名=;//這種方法更好,簡便
如:struct stu stu1=;
stu stu1=;//這種更好
結構體成員變數的訪問:
由「結構體變數名.成員變數名」組成,如:stu1.name//stu1的學號
注:結構體成員變數與普通變數⼀一樣,可直接賦值,如:stu1.score=80;
但是:stu1.name="zhangsan";是錯誤的,因為是字串,要用則需要用strcpy(stu1.name,"zhangsan")才可以
結構體變數也可以直接複製,如:stu1=stu2;
陣列是不可以直接賦值的,但可以通過把陣列放在結構體內實現陣列的直接賦值
結構體的記憶體占用情況:
以最大的成員變數所站的空間為分配單位,按結構體成員變數宣告順序自上而下分配
注:分配空間不⾜足以儲存成員變數時,分配新的空間單位
結構體的巢狀使用 如:
typedef struct datemydate;
typedef struct stu;
三:結構體應用
如://練習1:有三個學⽣生,程式設計找出分數最⾼高者以及年齡最⼩小者
main.m檔案
#import
#import"function.h"
//練習1:有三個學⽣生,程式設計找出分數最⾼高者以及年齡最⼩小者
//typedef struct student
//student;
int main(int argc, const char * argv) ;
student stu2=;
student stu3=;
// printf("%d %s %d %f\n",stu1.number,stu1.name,stu1.age,stu1.score);
student maxscorestudent=getmaxscorestudent( stu1, stu2,stu3);
print(maxscorestudent);
student minagestudent=getminagestudent(stu1, stu2, stu3);
print(minagestudent);
return 0;
}function.h檔案
#import
typedef struct student
student;
void print(student stu);
student getmaxscorestudent(student stu1,student stu2,student stu3);
student getminagestudent(student stu1,student stu2,student stu3);
function.m檔案
#import "function.h"
//由於返回的是整個結構體變數的資訊,則返回的還是結構體型別的student
student getmaxscorestudent(student stu1,student stu2,student stu3)
if (minagestudent.age>stu3.age)
return minagestudent;
}void print(student stu)
四:結構體與陣列
結構體與陣列組合,更加靈活使用,意思是將多個結構體變數(stu1,stu2,stu3,```stu7)放在一起,構成結構體陣列
如:stu stus[7]=;
訪問時,則可以stus[0].name,也就是stu1.name
課上練習://求5個學生的年份由小到大排序,年份比較,再按排序後輸出所有學生資訊
本題用到結構體巢狀+結構體陣列+函式呼叫知識點
main.m檔案
#import
#import "function.h"
//練習2:
//定義巢狀結構體
//typedef struct date
//mydate;
//typedef struct person
//person;
int main(int argc, const char * argv) ;
mydate date2=;
mydate date3=;
mydate date4=;
mydate date5=;
person person1=;
person person2=;
person person3=;
person person4=;
person person5=;
//定義結構體陣列,主要是為了便於多結構體變數的某個成員變數的排序問題。
person persons[5]=;
//求這些人的年份由小到大排序,年份比較,但是人person交換
sortbyyear(persons,5);
//上面只是實現了排序,交換認得資訊,下面print()是列印出所有結構體變數的資訊
print(persons,5);
return 0;
}function.h檔案
#import
typedef struct date
mydate;
typedef struct person
person;
void sortbyyear(person persons,int n);
void print(person persons ,int n);
function.m檔案
#import "function.h"
void sortbyyear(person persons,int n)}}
}void print(person persons, int n)student;
int main(int argc, const char * argv) ;
student stu2=;
student stu3=;
student stu4=;
student stu5=;
//學生的結構體陣列:
student stus[5]=;
//取最大值方法一:(不好)
// student maxscorestudent=gettwomaxscorestudent(stu1,stu2 );
// maxscorestudent=gettwomaxscorestudent(maxscorestudent,stu3 );
// maxscorestudent=gettwomaxscorestudent(maxscorestudent,stu4 );
// maxscorestudent=gettwomaxscorestudent(maxscorestudent,stu5 );
// printf("成績最高的學生資訊是\n");
// print(maxscorestudent);
int count=5;
//取最大值方法二:
printf("成績最高的學生資訊是\n");
getmaxscorestudent(stus,count);
//對上述5名學⽣生陣列,按成績從⾼高到低排序,並輸出
printf("按成績從⾼高到低排序,並輸出:\n");
sortarray(stus,count);//函式呼叫(裡面再呼叫輸出函式print()函式)
return 0;
}function.h檔案
#import
typedef struct student
student;
void print(student student);
void sortarray(student stus,int count);
void getmaxscorestudent(student stus,int count);
function.m檔案
#import "function.h"
//本函式只是輸出乙個人的資訊,不同那個輸出所有學生資訊的函式,那個則
//需要傳入結構體陣列名,以及列印的人數print(student stus,int count)
void print(student student)
//取最大值方法一:(不好,不簡便)
//student gettwomaxscorestudent(student stu1,student stu2 )
////取最大值方法二
void getmaxscorestudent(student stus,int count)
{student maxscorestudent=stus[0];//把stus[0]結構體賦給maxscorestudent結構體,進行比較
for (int i=1; i
結構體 結構體陣列
void test 函式遞迴呼叫 允許函式體裡再次呼叫函式本身 使用遞迴一定要有出口 long fact int n return n fact n 1 定義乙個新的資料型別 struct mypoint 結構體型別所占用的記憶體空間是最大資料型別的整數倍。因為結構體型別的變數在分配記憶體時有記憶體...
結構體 結構體陣列
struct 結構體型別名 型別名 成員名 型別名 成員名 先宣告結構體型別,再定義結構體變數名 宣告結構體型別,不分配空間 定義結構體型別變數,就要分配記憶體空間 作 者 hh 完成日期 2018年8月15日 版本號 v1.0 問題描述 結構體巢狀 賦值 輸出 輸入描述 程式輸出 include ...
結構體型別 結構體變數 結構體陣列 結構體指標
問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...