请懂c语言的帮忙解释一下注释后面加问号的语句啊。。。谢谢啊!!!

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineszSTR64//??????#definefil... #include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define szSTR 64 //??????
#define fileDB "c:\\contact.txt"//这是宏定义,相当于替换。在你的程序里有fileDB时,会自动替换成"c:\contact.txt"。意义在于方便修改,假如你程序里要使用很多次contact.txt,假如文件名改了,你就要在程序所有用到的地方都要修改。但如果定义了fileDB,你只需要在这一处地方修改一次即可。

struct CONTACT
{
char name[szSTR]; /*中括号部分代表什么?????*/
char unit[szSTR];/*工作单位*/
char tele[szSTR];/*电话*/
char mail[szSTR];/*mail*/
};

typedef struct CONTACT CON;//typedef声明新的类型名代替已有的类型名,也就是说允许由用户为数据类型取“别名”。例如:typedef int INTEGER 即此后就可用INTEGER来代替int作整型变量的类型

#define BNAME 1
#define BUNIT 2
#define BTELE 4
#define BMAIL 8
#define BFULL 0xFF //?????????
int OPER[5] = {BFULL, BNAME, BUNIT, BTELE, BMAIL};

void input(CON * s, int mask) //CON * s是定义的指针吗,变量是CON还是*s?????
{
if(mask & BNAME) { printf("请输入学生姓名:"); scanf("%s", s->name); }//if语句中是什么意思?????????
if(mask & BUNIT) { printf("请输入工作单位:"); scanf("%s", s->unit); }
if(mask & BTELE) { printf("请输入联系电话:"); scanf("%s", s->tele); }
if(mask & BMAIL) { printf("请输入电子邮件:"); scanf("%s", s->mail); }
}/*end input*/
展开
 我来答
百度网友fb922b4
2014-03-12 · 超过18用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:32万
展开全部
第一个问号是指 定义了一个szSTR 常量 64,相当于 int szSTR=64一样;
第二个问号 同理
第三个问号是指 定义了一个BFULL 的常量 他的内容是 十六进制的 0xFF
第四个问号是指 struct CONTACT 结构体类的指针 CON *s
最后一个问号是指判断这两个 常量是否为真,是“& 与 逻辑 ”,BUNIT是1,mask未见到你的定义,应该是其他函数里面用到的调用。
人渣29
2014-03-12 · 超过28用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:66.4万
展开全部
#define a XXX
其实就是把XXX赋值给a,相当于a = XXX;
这段可以改写成为
int szSTR = 64;
struct CONTACT
{
char name[szSTR]; /*中括号部分代表什么?????*/
char unit[szSTR];/*工作单位*/
char tele[szSTR];/*电话*/
char mail[szSTR];/*mail*/
};

这样应该就明白了吧

突然看到你那边后面写文件夹的地方不是有注释么,其实是一个意思,他说文件改一次就可以,这里数组的大小也是一样的
追问
嗯,这里明白了。。。后面那几个???能不能在给解释一下下.......
追答
另外一个define也是一样的意思
你说的那个CON *s 就是定义了一个CON类型的指针,我感觉你这个CON应该是上面的那个CONTACT,在这个结构体里面保存输入进来的信息
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-03-12 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6680万
展开全部
#define szSTR 64 ——行话叫“宏定义szSTR为64”。其实呢,就是告诉编译器,在编译之前将你的代码中的所有szSTR用64替换。这下你明白了吧,char name[szSTR]; 中的szSTR就是64,编译前编译器把char name[szSTR];就替换成了char name[64]; 。CON * s声明的s是CON *型指针;不要把*与p算在一起,*p不是变量,你见过以*开头的标识符吗?
追问
嗯嗯,前面都明白了,CON * s声明的s是CON *型指针;
是什么情况,没见过这个类型啊,还有这个语句#define BFULL 0xFF 中0xFF 什么意思?
还有最后一个if(mask & BNAME) 怎么理解
追答
C/C++是允许自行定义类型的,如结构体;如果CON是算定义的结构体类型,那CON和*一起修饰p是指向CON型结构体的指针变量。0xFF是16进制的255啊,0x开头的常数都是16进制表示法。if(mask & BNAME)中的mask & BNAME是两个变量或一个变量与一个常数进行“按位与”操作,写在if的 ()中就是操作结果不为0的意思,即和if((mask & BNAME)!=0)等价。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小小呱瓜
2014-03-12
知道答主
回答量:4
采纳率:0%
帮助的人:5604
展开全部
请去了解一下什么叫宏,什么叫预处理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-12
展开全部
判断语句?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式