C 結(jié)構(gòu)體

2018-07-04 14:21 更新

學(xué)習(xí)C - C結(jié)構(gòu)體

我們可以定義一個(gè)struct來(lái)聲明一個(gè)新的數(shù)據(jù)類型。

我們使用 struct 關(guān)鍵字。

使用struct關(guān)鍵字可以定義一個(gè)稱為單個(gè)單元的結(jié)構(gòu)的各種類型的變量集合。

以下代碼是結(jié)構(gòu)聲明的簡(jiǎn)單示例:

struct Dog { 
  int age; 
  int height; 
} aDog; 

此示例聲明一個(gè)名為Dog的結(jié)構(gòu)類型。

這不是一個(gè)變量名;這是一種新的類型。

此類型名稱稱為結(jié)構(gòu)標(biāo)簽或標(biāo)簽名稱。

Dog結(jié)構(gòu),年齡和高度中的變量名稱稱為成員或字段。

結(jié)構(gòu)的成員出現(xiàn)在跟隨struct標(biāo)簽名稱Dog的大括號(hào)之間。

在該示例中,結(jié)構(gòu)的實(shí)例(稱為aDog)被聲明。

aDog是Dog類型的變量。

aDog包括結(jié)構(gòu)的兩個(gè)成員:成員年齡和成員身高。

以下代碼為結(jié)構(gòu)類型Dog添加更多成員。

struct Dog 
{ 
  int age; 
  int height; 
  char name[20]; 
  char father[20]; 
  char mother[20]; 
} aDog = { 4, 1, "name", "C", "C++" }; 

這個(gè)版本有五個(gè)成員的狗結(jié)構(gòu)類型。

在變量aDog的聲明中,出現(xiàn)在最后一對(duì)大括號(hào)之間的值按順序應(yīng)用,到成員變量age(4),height(1),name(“name"),father(“C")和mother(“C ++")。



定義結(jié)構(gòu)類型和結(jié)構(gòu)變量

您可以在單獨(dú)的語(yǔ)句中定義結(jié)構(gòu)類型的結(jié)構(gòu)類型和變量。

struct Dog { 
  int age; 
  int height; 
  char name[20]; 
  char father[20]; 
  char mother[20]; 
}; 

struct Dog aDog = { 4, 1,"name", "C", "C++" }; 

第一個(gè)語(yǔ)句定義結(jié)構(gòu)標(biāo)簽Dog,第二個(gè)是該類型的一個(gè)變量的聲明,aDog。

以下代碼定義了Dog類型的另一個(gè)變量:

struct Dog brother = { 3, 5, "new name", "C", "C++" };

您可以在單個(gè)語(yǔ)句中聲明多個(gè)結(jié)構(gòu)變量。

struct Dog aDog, brother;

您可以在單個(gè)語(yǔ)句中聲明多個(gè)結(jié)構(gòu)變量。...

您可以使用typedef定義刪除struct。

例如:

typedef struct Dog Dog;

這定義了Dog等同于struct Dog。

如果將此定義放在源文件的開(kāi)頭,你可以定義一個(gè)Dog類型的變量,像這樣:

Dog t = { 3, 5, "new name", "C", "C++" };

struct關(guān)鍵字不再需要。



訪問(wèn)結(jié)構(gòu)成員

通過(guò)寫變量名稱后跟一個(gè)句點(diǎn)來(lái)引用結(jié)構(gòu)的成員,其次是會(huì)員變量名。

aDog.age = 12;

該期間稱為成員選擇運(yùn)算符。

此語(yǔ)句將aDog引用的結(jié)構(gòu)的age成員設(shè)置為12。

您可以選擇在初始化列表中指定成員名稱,如下所示:

Dog t = { .height = 5, 
               .age = 3, 
               .name = "name", 
               .mother = "C", 
               .father = "C++" };

以下代碼顯示如何定義結(jié)構(gòu)類型,并分配從鍵盤讀取的值以存儲(chǔ)在其中。


#include <stdio.h> 

typedef struct Dog Dog;            // Define Dog as a type name 
  
struct Dog                           // Structure type definition 
{ 
  int age; 
  int height; 
  char name[20]; 
  char father[20]; 
  char mother[20]; 
}; 
  
int main(void) { 
  Dog my_Dog;                      // Structure variable declaration 
  
  // Initialize  the structure variable from input data 
  printf("Enter the name of the Dog: " ); 
  scanf("%s", my_Dog.name, sizeof(my_Dog.name));     // Read the name 
  
  printf("How old is %s? ", my_Dog.name ); 
  scanf("%d", &my_Dog.age );                           // Read the age 
  
  printf("How high is %s ( in hands )? ", my_Dog.name ); 
  scanf("%d", &my_Dog.height );                        // Read the height 
  
  printf("Who is %s"s father? ", my_Dog.name ); 
  scanf("%s", my_Dog.father, sizeof(my_Dog.father)); 
  
  printf("Who is %s"s mother? ", my_Dog.name ); 
  scanf("%s", my_Dog.mother, sizeof(my_Dog.mother)); 
  
  // Now tell them what we know 
  printf("%s is %d years old, %d hands high,", my_Dog.name, my_Dog.age, my_Dog.height); 
  printf(" and has %s and %s as parents.\n", my_Dog.father, my_Dog.mother); 
  return 0; 
} 

上面的代碼生成以下結(jié)果。

例子

為了說(shuō)明,我們定義新的數(shù)據(jù)類型,稱為employee。


#include <stdio.h> 

// define a struct 
struct employee{ 
    int id; 
    char name[10]; 
    char country[5]; 
}; 

int main() { 

    // declare struct variable 
    struct employee emp; 

    // set values 
    emp.id = 10; 
    sprintf(emp.name,"jane"); 
    sprintf(emp.country,"DE"); 

    // display 
    printf("id: %d, name: %s, country : %s\n",emp.id,emp.name,emp.country); 

    return 0; 
} 

上面的代碼生成以下結(jié)果。

結(jié)構(gòu)數(shù)組

以下代碼顯示如何創(chuàng)建結(jié)構(gòu)數(shù)組。


#include <stdio.h> 
#include <ctype.h> 

typedef struct Dog Dog;            // Define Dog as a type name 
  
struct Dog                           // Structure type definition 
{ 
  int age; 
  int height; 
  char name[20]; 
  char father[20]; 
  char mother[20]; 
}; 
  
int main(void) 
{ 
  Dog my_Dogs[3];                 // Array of Dog elements 
  int hcount = 0;                 // Count of the number of Dogs 
  char test = "\0";               // Test value for ending 
  
  for(hcount = 0 ; hcount < sizeof(my_Dogs)/ sizeof(Dog) ; ++hcount) 
  { 
    printf("Do you want to enter details of a%s Dog (Y or N)? ", hcount ? "nother" : "" ); 
    scanf(" %c", &test, sizeof(test)); 
    if(tolower(test) == "n") 
       break; 
  
    printf("Enter the name of the Dog: " ); 
    scanf("%s", my_Dogs[hcount].name, sizeof(my_Dogs[hcount].name)); 
  
    printf("How old is %s? ", my_Dogs[hcount].name ); 
    scanf("%d", &my_Dogs[hcount].age); 
  
    printf("How high is %s ( in hands )? ", my_Dogs[hcount].name); 
    scanf("%d", &my_Dogs[hcount].height); 
  
    printf("Who is %s"s father? ", my_Dogs[hcount].name); 
    scanf("%s", my_Dogs[hcount].father, sizeof(my_Dogs[hcount].father)); 
  
    printf("Who is %s"s mother? ", my_Dogs[hcount].name); 
    scanf("%s", my_Dogs[hcount].mother, sizeof(my_Dogs[hcount].mother)); 
  } 
  // Now tell them what we know. 
  printf("\n"); 
  for (int i = 0 ; i < hcount ; ++i) { 
    printf("%s is %d years old, %d hands high,", my_Dogs[i].name, my_Dogs[i].age, my_Dogs[i].height); 
    printf(" and has %s and %s as parents.\n", my_Dogs[i].father, my_Dogs[i].mother); 
  } 
  return 0; 
 
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)