1.注意事项:
1.1在声明后一定要叫;,结构体类型声明在主函数之前,工作中一般声明放在头文件中
1.2结构体初始化只能在一开始定义,如已经定义了,只能对成员单个进行赋值。
1.3通过 结构体变量名.成员名来访问结构体成员
1.4输入 使用scanf输入只能是对各成员取地址,而且字符%c不会忽略空格,故要在前面加一个空格,即 %c才能实现正确输入
2.初始化、定义、结构体指针
#include<stdio.h>
#include<stdlib.h>
struct student{
int num;
char name [20];
float grade;
};
int main(){
struct student s={1001,"zhangsan",99.9};
struct student arr[3];
struct student *p;
int i;
int num;
p=&s;
printf ("%d %s %.2f\n",p->num ,p->name ,p->grade);
puts("___________________________");
for(i=0;i<3;i++){
scanf ("%d %s %f",&arr[i].num ,&arr[i].name ,&arr[i].grade );
}
puts("___________________________");
for(i=0;i<3;i++){
printf ("%d %s %.2f\n",arr[i].num ,arr[i].name ,arr[i].grade );
}
puts("___________________________");
p=arr;
printf ("%d %s %.2f\n",(*p).num ,p->name ,arr[0].grade );//三种输出方式
//.号成员选择的优先级要比解引用*高,故加括号
//该方式只能打印arr[0]的值
//打印别的方式 (*(p+n)).或p+n->
puts("___________________________");
num=p->num ++;
printf("num=%d p->num=%d p=%p\n",num,p->num,p );//1001,1001+1 地址1
num=p++->num;
printf("num=%d p->num=%d p=%p\n",num,p->num,p);//1002,下一个num,偏移一个地址
system ("pause");
return 0;
}
3.typedef的使用:
#include<stdio.h>
#include<stdlib.h>
typedef struct student{
int num;
char name [20];
float grade;
}stu,*pstu;
int main(){
stu s={1000,"zhangsan",99.8};
pstu p;
p=&s;
printf("%d %s %.2f\n",p->num ,(*p).name ,s.grade );
system ("pause");
return 0;
}