1、结构体变量的初始化
例:
#include "StdAfx.h" #include<stdio.h> void main() { struct { int num; char *name; char sex; float score; }boy1,boy2={102,"Jane",'M',98.5}; boy1=boy2; printf("number=%d name=%s score=%f ",boy1.num,boy1.name,boy1.score); printf("number=%d name=%s score=%f ",boy2.num,boy2.name,boy2.score); }
2、结构体数组
一个结构体变量中可以存放一组数据(如一个学生的学号,姓名,成绩等数据)。若有10个学生的数据需要参加运算,显然应用数组,这就是结构体数组。结构体数组与数值型数组不同之处在于每一个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。
例:
#include "StdAfx.h" #include<stdio.h> #include<stdlib.h> #define NUM 3 struct person { char name[20]; char phone[10]; }; void main() { struct person man[NUM]; int i; for(i=0;i<NUM;i++) { printf("input name: "); gets(man[i].name); printf("input phone: "); gets(man[i].phone); } printf(" name phone "); for(i=0;i<NUM;i++) { printf("%10s %10s ",man[i].name,man[i].phone); } system("pause"); }
定义结构体数组
与其他类型数组一样,对结构体数组也可以初始化。
例:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu[2] = { {101,"LILIN","m",18,97.5,"beijing"}, {102,"zhang","f",17,99,"shanghai"} };
也可用如下形式:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student str[2] = { {101,"LILIN","m",18,97.5,"beijing"}, {102,"zhang","f",17,99,"shanghai"} };
即先声明结构体类型,然后定义数组为该结构体类型,在定义数组是初始化。
3、指向结构i数据类型的指针
一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址。
可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。
指针变量也可以用来指向结构体数组中的元素。
说明的一般形式:struct 结构名 *结构指针变量名
例:已说明一个指向stu的指针变量pstu,struct stu*pstu;也可在定义stu结构的同时说明pstu。
与之前讨论的各类指针变量相同,结构指针变量也必须先赋值,然后才能使用。
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
例:若boy是被说明为stu类型的结构变量,则:pstu=&boy是正确的,而pstu=&stu是错误的。
原因:结构名和结构变量是两个不同的概念,结构名只能表示一个结构形式,系统并不能为其分配内存空间,只有当某个变量被说明为这种类型的结构时,才能对变量分配内存空间。
调用的一般形式为:(*结构指针变量).成员名或为:结构指针变量→成员名
例:
#include "StdAfx.h" #include<stdio.h> struct stu { int num; char *name; char sex; float score; }boy1={102,"kun",'m',98.5}; void main() { struct stu *pstu; pstu=&boy1; printf("number=%d name=%s sex=%c score=%f ",boy1.num,boy1.name,boy1.sex,boy1.score); printf("number=%d name=%s sex=%c score=%f ",(*pstu).num,(*pstu).name,(*pstu).sex,(*pstu).score); }