《IOS C語言》結構體 結構體陣列

2021-07-04 22:30:52 字數 4592 閱讀 3527

一:結構體宣告

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...