结构体里不能开辟空间2021-08-12

代码如下:

//1)一个景区根据游人的年龄收取不同价格的门票。
//2)请编写游人结构体(Visitor),根据年龄段决定能够购买的门票价格并输出
//3)规则:年龄>18,门票为20元,其他情况免费
//4)可以循环从控制台输入名字和年龄,打印门票收费情况,如果名字输入 n,则退出程序

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct Visitor{
	
	char name[20];
	//char name[20];//这里最好是确定长度的数组,char *name;是错误的
	//
	int age;
	int pay;
};

void ticket(struct Visitor *visitor){
	if((*visitor).age>=18){
		(*visitor).pay = 20;
	}else{
		(*visitor).pay = 0;
	}
}

int main(){
	
	struct Visitor visitor;
	printf("请输入游客姓名和年龄:\n");
	scanf("%s %d",visitor.name,&visitor.age);
	if(!strcmp("n",visitor.name)){
		printf("退出程序\n");
		return 0;
	}
	ticket(&visitor);
	printf("该付钱:%d\n",visitor.pay);
	return 0;
}

问题分析

	起因是我定义了一个结构体,name属性我采用指针的形式定
义即:	char *name。但是在底下的main函数中,我用scanf
语句输入字符串供	name 接收,发现出错,后了解到,必须
先分配好空间才能接收	scanf语句	输入的值。
	我尝试在结构体体中利用 malloc 给	name	属性分配堆中
的空间,结果出错。
多方查找原因后,我得出以下结论:
	定义结构体只是定义一种数据类型,系统不会为其一个**数
据类型**的定义分配内存,所以给属性初始化显然不可能,
只有当用新定义的数据类型也就是结构体来定义一个结构体
变量时,系统才会为这个对象申请一段内存空间。
这里我将给属性	name	分配空间类比为初始化,即不能给一个数据类型分配空间。
	当然,以上仅为我个人浅薄观点,存在漏洞,请诸位注意甄	
别
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值