
1.访问结构成员的直接运算符(.):对象.成员
struct Person{char name[10]; int age;};
struct Person p1, p2={"huping", 50};
strcpy(p1.name,"wangming"); //采用点运算符访问成员 p1.age=39; //采用点运算符访问成员 int x=p1.age+p2.age; //x值为89 printf("%s\n", p1.name);
2.访问结构成员的间接运算符(->):指针对象->成员
struct Person *px=&p2;
strcpy(px->name,"LiuXin");
// px->name等同于(*px).name,均表示访问p2.name
px->age=52; // px->age等同于(*px).age,均为p2.age
3.结构赋值操作:对象=对象
struct Person x1={"AnJie",60},x2;
x2=x1 //把x1对象的值赋给x2对象中
使用结构的程序举例
程序1:
#include<stdio.h>{
struct AB{char a[10]; int b;}; //全局作用域类型
struct AB r[5]={{"xxk",35}, {"wrong",45},
{"xc",23}, {"tsh",18}, {"chs",38}}; //全局数组
void main() {
int i, k=0;
for(i=1; i<5; i++)
if(r[i].b<r[k].b) k=i;
printf("%s %d\n",r[k].a,r[k].b);
} //输出结果:tsh 18
程序2:功能:对学生结构数组中的学生记录按学号进行排序。
首先定义学生记录结构类型
#include<stdio.h></stdio.h>
#include<string.h></string.h>
struct student { //定义学生记录结构
char num[8]; //学号
char name[10]; //姓名
short int grade; //成绩
};
接着给出结构类型的别名和学生结构数组的定义和初始化。
typedef struct student Studen
Student a[5]={ {"cs102","张平",78},{"ch231","王广敏",69},
{"ec115","刘文",82}, {"pt327","古明",72}, {"bx214","张文远",65}};
对数组a[n]进行输出的函数定义
void Output(Student a[], int n) {
int i;
printf("显示%d个学生:\n",n);
for(i=0; i<n; i++) {
printf("%-8s %-10s %d\n",a[i].num, a[i].name,a[i].grade);
} //格式符负号(-)为左对齐显示
printf("\n");
}
对a[n]中的记录按学号升序排列
void Range(Student a[], int n) {
int i,j,k;
for(i=1; i< n; i++) {
k=i-1;
for(j=i; j<n; j++)
if(strcmp(a[j].num, a[k].num)<0) k=j;
{Student x=a[i-1]; a[i-1]=a[k]; a[k]=x;}
}
}
利用下面的主函数来调用上面的输出函数Output()和排序函数Range(),实现程序功能。
void main(){
Output(a,5);
Range(a,5);
Output(a,5);
}