天天看點

C語言結構體類型定義+結構體變量的定義與使用及其初始化+結構體變量作為函數參數

C語言結構體類型定義+結構體變量的定義與使用及其初始化+結構體變量作為函數參數

  • ​​結構體​​
  • ​​引例​​
  • ​​結構體變量的定義​​
  • ​​結構體變量的使用​​
  • ​​結構體變量作為函數參數​​
  • ​​結構體變量的初始化​​
  • ​​下一篇文章​​

結構體

引例

輸出平均分最高的學生資訊

#include <stdio.h>
struct student
{
  int num;
  char name[10];
  int computer,english,math;
  double average;//這些都是結構體成員
};//注意這個分号不要可少,否則會報錯
int main()
{
  int i,n;
  struct student s1,max;//定義結構體變量s1和結構體變量max
  printf("Input n:");
  scanf("%d",&n);//n是學生的個數
  printf("Input the student's number, name and course scores:\n");
  for(i=1;i<=n;i++)//用for循環實作n個學生成績的輸入
  {
    printf("No.%d:",i);//提示學生的序号
    scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);
    //分别給結構體裡面的變量輸入數值
    s1.average=(s1.math+s1.english+s1.computer)/3.0;//計算出該學生的平均成績
    if(i==1)max=s1;
    if(max.average<s1.average)//找出平均分最高的學生
      max=s1;//将s1裡面的成員變量的值分别對應地指派給max
  }
  printf("num:%d, name:%s, average:%.2lf\n",max.num,max.name,max.average);
  //将平均成績最高的學生成績輸出
  return 0;  
}      
  • 結構體類型的定義:

    結構體類型實際上是一種模闆,它的定義形式為:

struct 結構體名
{
  類型辨別符 結構體成員名1;
  類型辨別符 結構體成員名2;
  ...
  類型辨別符 結構體成員名3;
};//最後的這個分号不要忘了      

注意不要忘記最後的分号

結構體變量的定義

在結構體類型定義好的情況下,注意是結構體類型定義好的情況下,才能定義結構體變量。

比如:

struct student
{
  int num;
  char name[10];
  int computer,english,math;
  double average;
};      

這個是結構體類型的定義,然後才能進行結構體變量的定義:

struct 結構體類型名 結構體變量名;      
struct student stu1,stu2;//定義兩個結構體變量      

也可以在定義結構體類型的時候同時定義結構體變量,如:

struct student
{
  int num;
  char name[10];
  int computer,english,math;
  double average;
}stu1,stu2;//定義兩個結構體變量;      

也可以省略結構體類型名,如:

struct//省去了結構體類型的名字student
{
  int num;
  char name[10];
  int computer,english,math;
  double average;
}stu1,stu2;//定義兩個結構體變量;      

省略了結構體類型的名字,在這種情況下,結構體變量隻能在後面同時定義,而不能在主函數中定義。是以并不建議這樣定義結構體變量

  • 注意:結構體變量的變量名和成員名可以相同,二者互不影響,互不幹擾,如:
struct date
{
  int year;
  int month;
  int day;
};
int main()
{
  struct date year;
  year.year = 1980;
}      

結構體變量的使用

使用形式為:​

​結構體變量.結構體成員名​

scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);      
  • 注意:如果結構體類型中有字元數組成員,并且在主函數中要給字元數組賦字元串常量時,不能直接用“=”,即​

    ​s1.name="張三";​

    ​​是錯誤的,必須使用字元串複制函數strcpy()函數來實作,如:​

    ​strcpy(s1.name,"張三");​

  • C語言結構體類型定義+結構體變量的定義與使用及其初始化+結構體變量作為函數參數
    C語言結構體類型定義+結構體變量的定義與使用及其初始化+結構體變量作為函數參數
  • 同一類型的結構體變量間可以指派

    如:​​

    ​stu2=stu1;​

    ​将結構體變量stu1裡面的所有成員變量的值分别對應賦給結構體變量stu2

結構體變量作為函數參數

  • 結構體變量的成員作為函數的實參,形參為普通變量或數組
  • 也可以将結構體變量作為函數的參數

    例如:(請看代碼中的詳細注釋,并觀察運作結果)

#include <stdio.h>
#include <string.h>
struct s_score
{
  int no;
  char name[10];
  int score[3];
};//不要忘記這個分号
void output(struct s_score a);//形參為結構體變量
void fun(int *q);//形參為指針 
main()
{
  struct s_score a={1001,"zhangsan",{60,60,60}};//這行語句是對結構體變量的初始化
  output(a);
  a.no=1001;
  strcpy(a.name,"wang lin");
  a.score[0]=78;
  a.score[1]=88;
  a.score[2]=94;
  output(a);
  fun(a.score);//結構體中的數組成員,數組名為數組首位址 
  output(a);
}
void output(struct s_score a)//将結構體變量作為形參接收來自主函的結構體變量 
{
  int i;
  printf("%d  %s   ",a.no,a.name);
  for(i=0;i<3;i++)
    printf("%4d",a.score[i]);
  printf("\n");
}
void fun(int *p)//定義指針變量來接收主函數傳入的數組首位址 
{
  int i;
  for(i=0;i<3;i++)
  {
    *(p+i)+=10;//通過循環變量i來對指針變量進行運算 
    if(*(p+i)>100)
      *(p+i)=100;
  }
}      
C語言結構體類型定義+結構體變量的定義與使用及其初始化+結構體變量作為函數參數

結構體變量的初始化

struct s_score a={1001,"zhangsan",{60,60,60}};      
  • 1

繼續閱讀