代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Visitor{
char name[20];
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 分配空间类比为初始化,即不能给一个数据类型分配空间。
当然,以上仅为我个人浅薄观点,存在漏洞,请诸位注意甄
别