6)結構型與自定義類型

 

結構型的定義數組

  基本數據類型是系統提供的數據類型,而結構類型是用戶在程序中本身定義的一種數據類型。這種結構型必須先定義,而後才能用已經定義的結構型來定義相應的變量、數組、指針等。函數

  特色:能夠本身定義一種數據類型來存放類型不一樣的數據。這種數據類型就稱爲「結構型」。結構型又稱「結構體型」。指針

  例如:姓名是字符串型(用字符數組來存放);對象

  性別是字符型(用‘m’表示男性、用‘f’表示女性);內存

  年齡是整型;字符串

  工資是實型。變量

  struct person{數據類型

    char name[10]引用

    char sex;float

    int age;

    float wage;

  }

  這樣就能夠定義含有一個字符數組、一個字符型、一個整型、一個實型的數據爲一個結構型數據。

  結構型的定義

  struct 結構型名{

    數據類型符1 成員1 名;

    。。。。。。。。

    數據類型符n 成員n 名;

};

其中:結構型名  是用戶取得標識符。

  結構類型符  能夠是基本類型說明符,也能夠是已定義過的某種結構型

  成員名    能夠是標識符、標識符[長度]、*標識符等。

成員也稱「域」、「結構份量」。

  注意:結構型僅僅是一種數據類型,系統並不會給結構型成員分配內存。已經定義的某種結構型能夠做爲一種數據類型,當用來定義變量、數組、指針變量時,纔會給定義的變量、數組、指針變量分配內存。

結構型變量的定義和成員的引用

  1)結構型變量成員的引用

  1.結構性變量成員的引用方法以下。

  結構型變量名.  成員名

  其中的「.」 稱爲成員運算符,是雙目中綴運算符。前一個對象必須是結構型的變量(或結構型數組元素),後一個對象是該結構型的成員名。

  例如:struct xy{int x; float y[10];}xy1={1,{1.0,2.0,3.0}};

  xy1.x  //至關於一個整型變量,其值爲1.

  xy1.y  //至關於一個實型數組的首地址。

  xy1.y[1]  //至關於一個實型數組元素,其值爲2.0

  下列引用是錯誤的:xy.x  xy是結構型名稱,不是該結構型變量(或數組元素)

  2)結構型變量成員地址的引用方法

  以下:

  成員時變量形式的變量地址:  &結構型變量名. 成員名

  成員是數組形式的變量地址:  結構型變量名. 成員名

  成員時數組,其數組元素的地址:  &結構型變量名. 成員數組[下標]

  例子:struct student2{long number; char name[10];};

  void main(){

    struct student2 x;

    long * p_number;

    char *p_name;

    p_number=&x.number;//讓指針變量分別執行結構型變量x的兩個成員

    p_name=x.name

    *p_number=100001L;

    strcpy(p_name,"zhao1");

}

  3)結構型變量地址的引用方法

  以下:

  &結構型變量名

  注意,存放結構型變量地址的指針變量必須是相同結構型的結構型指針變量。

結構型數組的定義和數組元素成員的引用

  1)結構型數組的定義和初始化

  例如,定義一個學生數組,能夠使用下列三種方法

  1.先定義結構型,而後再定義結構型數組並賦初值。

  2.定義結構性的同時定義數組並賦初值。

  3.定義無名成的結構型的同時定義數組並賦初值。

  struct student {

    long number;

    char name[10];

    char sex;

    float score[3];

};

  struct student s[3]={

    {200001L,"qian2",'m',{78,89,98}},

    {200001L,"qian2",'m',{78,89,98}},

    {200001L,"qian2",'m',{78,89,98}}

}

  2)結構型數組元素成員的引用

  1.構型數組元素成員的引用

  引用方法以下:

  結構型數組名[下標].成員名

  struct students{

    long number;

    char name[10];

  }s[4];  //定義student2結構型數組s

  void main(){

    s[0].number=100001L;//給結構型數組元素s[0]的成員number複製

    strcpy(s[1].name,"sun3");//給結構型數組元素s[1]的成員name[]賦值。

  }

  2)結構型數組元素成員地址的引用方法

  &結構型數組名[下標]. 成員名

  struct students{

    long number;

    char name[10];

  };

  void main(){

    struct student2 s[2];

    long *p_number;

    char * p_name;

    p_number=&s[0].number;//長整形指針變量指向結構型數組元素s[0]的成員number;

    p_name=s[1].name;//字符型指針變量指向結構型數組元素s[1]的成員name數組.

    *p_number=100001L;

    strcpy(p_name,"sun3");

  }

  3)結構型數組元素地址的引用方法

  &結構型數組名[下標]

  存放結構型數組元素地址的指針變量必須是類型相同的結構型指針。

指向結構型數據的指針變量的定義和使用

  1)指針變量指向數組元素

  若是有一個結構型數組元素的地址已賦予相同結構型指針變量,能夠使用下列兩種方式來引用該元素的成員,其做用徹底相同。

  方式1  (*指針變量).成員名

  方式2  指針變量->成員名

  注意:這裏的指針變量必須已經指向某個結構型數組元素。例如,它指向的數組元素爲「數組名[k]」,則上述兩種引用方式均表明「數組名[k].成員名」

  2)指針變量指向數組

  方式1  (*(指針變量+k)).成員名

  方式2  (指針變量+k)->成員名

  注意,這裏的指針變量必須已經指向某個結構型數組,則上述兩種引用方式均表明「數組名[k].成員名」。

在函數間傳遞結構型數據

  1)使用全局外部變量傳遞結構型數據

  使用全局外部變量傳遞結構型數據時,只要在程序的開頭定義結構型及其變量或數組,就能夠在其後定義的函數間傳遞結構型數據。

  #define N 10;

  struct student3{long num; char name[10]; int age;}stu[N];

  void my_in(){

    int i ;

    for(i=0;i<N;i++){

      scanf("%s",stu[i].name);

    }

    return;

  }

void main(){

  int i;

  my_in();

  for(i=0;i<N;i++){

    printf("%s",stu[i].name);

  }

}

2)使用返回值方式傳遞結構型數據。

  使用返回值方式只能返回1個結構型數據,定義函數時的數據類型符必須是某種已定義的結構型,利用「return(表達式)」;

  define N 10;

  struct student3{long num; char name[10]; int age;};

  struct student3 my_in(){

    int i ;

    struct student3 stu1;

    scanf("%s",&sut1.name);

    return(stu1);

}

void main(){

  int i ;

  struct student3 stu[N];  //定義結構型student3的數組stu;

  for(i=0;i<N;i++){

    stu[i]=my_in();  //將函數返回值存入結構型數組元素。

  }

  for(i=0; i<N; i++){

    printf("%s",stu[i].name);

  }

}

3)使用形參與實參方式傳遞結構型數據。

  1.使用地址參數方式。

  使用地址傳送方式,形參應被說明成某種結構型的數組或指針變量,而對應實參必須是同一種結構型的變量地址、數組名、數組元素地址、已賦值的指針變量。

  2.使用值傳遞方式

  使用值傳遞方式,形參應爲變量形式,並要說明成某種結構型,而對應的實際參數必須是同一種結構型的變量或數組元素。

相關文章
相關標籤/搜索