结构体类型定义的语法语义:

         struct  结构体名

         {  成员表列  };  

告诉编译器一个新的类型和它的成员变量,该类型的大小等于所有成员变量的大小之和。

结构体变量定义的语法语义::

       struct  结构体名 变量名;

在内存中为变量分配内存空间,大小为结构体类型的大小。

访问成员变量的语法:

结构体变量名.成员变量名

 strcpy( a.name, "Li Si");

结构体变量地址和动态结构体

   struct Student {

    int num;

    char name[20];

    float score[3];

    float average;

  };

  struct Student s;

结构体变量s的成员变量的地址包括:&s.num,s.name,&s.score[0]等,结构体变量s的地址是&s,与&s.num相等

指针变量可以指向结构体变量的成员变量

struct Student s;

 int *p = &s.num;

 *p = 101;

 printf("%d\n", *p);

指针变量可以指向结构体变量

struct student s;

struct student* p;

p=&s;

p->num=101;

printf("%d",(*p).num);

结构体变量地址作为函数参数

结构体变量成员,结构体变量成员地址,可以作为函数实参

void print(int i, int* p)

{  *p = i + 1;  }

struct Student s1;

print(s1.num, &s1.num);

结构体变量,结构体变量地址,可以作为函数实参

void print(struct Student s, struct Student *p)

{ p->num = s.num + 1; }

struct Student s1, *p1 = &s1;

print(s1, p1);

结构体数组

语法:struct  Student  s[3];

结构体数组元素地址

数组名是一个指针常量,代表数组首元素的地址

指针算术以结构体大小为计算单位。


结构体数组元素地址作为函数参数

数组元素可以作为函数实参,函数的形参是一个数组元素类型的变量

数组元素地址可以作为函数实参,函数的形参是一个数组元素指针类型的变量

需要往函数传整个结构体数组时,或者这个参数会在函数内被改动,函数参数为指针

需要往函数传一个结构体并且这个参数不会在函数内被改动,函数参数为结构体