C语言结构体与共用体02

小甲鱼结构体与共用体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个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值