小甲鱼结构体与共用体02
源码①:
#include <stdio.h>
void main()
{
struct student
{
int num;
char *name;
char sex;
float score;
}boy1,boy2 = {102,"Jane",'M',98.5};
boy1 = boy2;
printf("Number = %d\nName = %s\nScore = %d\n",boy1.num,boy1.name,boy1.score);
printf("\n\n");
printf("Number = %d\nName = %s\nScore = %d\n",boy2.num,boy2.name,boy2.score);
}
源码②:做一个简单的通讯录
//简单的通讯录
#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: \n");
gets(man[i].name);
printf("input phone: \n");
gets(man[i].phone);
}
printf("\tname\t\t\t\t\tphone\n\n");
for(i=0;i<NUM;i++)
{
printf("%20s\t\t\t\%20s\n",man[i].name,man[i].phone);
}
system("pause");
}
源码③:
#include <stdio.h>
struct stu
{
int num;
char *name;
char sex;
float score;
}boy1 = {102,"Fishc",'M',99.5};
void main()
{
struct stu *pstu;
pstu = &boy1;
printf("Number = %d\nName = %s\n",boy1.num,boy1.name);
printf("Sex = %c\nScore = %f\n",boy1.sex,boy1.score);
printf("\n\n");
printf("Number = %d\nName = %s\n",(*pstu).num,(*pstu).name);
printf("Sex = %c\nScore = %f\n",(*pstu).sex,(*pstu).score);
printf("\n\n");
printf("Number = %d\nName = %s\n",pstu->num,pstu->name);
printf("Sex = %c\nScore = %f\n",pstu->sex,pstu->score);
}
指向结构体类型数据的指针:
结构指针变量说明的一般形式:struct 结构体 *结构指针变量名
例如,在源码③中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:struct stu *pstu;
当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
struct stu
{
...;
}boy;
如果boy是被说明为stu类型的结构变量,则:
pstu = &boy是正确的。
pstu = &stu是错误的。为什么呢?
因为,结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。
只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。
因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能方便地访问结构变量的各个成员。
练习:写一个对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。