c++头文件中#define的作用

c++头文件中#define的作用大家帮忙说下,最好是根据自己的理解说下typedefstructLNode{ElemTypedata;structLNode*next;... c++头文件中#define的作用
大家帮忙说下,最好是根据自己的理解说下
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;

void InitList_L(LinkList &L)
{
L = new LNode;
if (!L)
cout<<"内存分配失败";
else
L->next = NULL;
}
顺便问下这段程序中*LinkList,是什么作用,为什么函数中会有LinkList &L,LinkList不是一个指针吗?
L = new LNode;这里的new又是什么意思?

LinkList在这里不是指向结构体的指针吗?那么LinkList是和int一样了?为什么不是LNode &L?
展开
 我来答
百度网友6809e30a0
2009-12-09 · TA获得超过5284个赞
知道大有可为答主
回答量:3765
采纳率:0%
帮助的人:2786万
展开全部
1、*LinkList是定义一个LNode的指针变量,这样定义是没有实体的,需要new的
2、LinkList &L这个参数是传址参数,实际上和LinkList *L这样的指针参数的意义是一样的,这样写的话调用的时候可以方便一点
3、new的意思是声明一个新实例,然后将实例的地址赋值给指针,如果你仅仅只是声明一个指针,他是没有实体的,new的话可以给他一个新的实体,这个建议参考“面向对象编程”方面的章节,在使用完毕后还需要delete掉指针以释放实体
4、#define是C/C++特有的宏定义,在使用的时候会有很多方便的地方,此外系统也会定义一些参数,如WIN32、_cplusplus等,再配合#ifdef等宏可以方便程序员编写和调试程序,有很大的好处

PS:我总觉得你这段程序有问题,InitList_L的参数是LinkList,而new的是LNode,还有L->next应该改为L.next,只有指针参数才需要用->
Hiei1234
推荐于2018-05-04 · TA获得超过157个赞
知道小有建树答主
回答量:221
采纳率:0%
帮助的人:125万
展开全部
宏定义 简单的字符替换 在 编译前做的替换
#define THREE 3

int a = THREE;
在送编译时 替换为 int a = 3;

#define POWER(x) x * x
int a = POWER(10)
在送编译时 替换为 10 * 10
注意 若为 POWER(5 + 3) 则替换为 5 + 3 * 5 + 3
所以宏只是简单的文本替换

*LinkList 在typedef 的作用下 是LNode 的指针类型

也就是说申明LNode 指针的时候你可以用
LinkList p = 0;//等价于 LNode* p = 0;

new 动态分配内存空间
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
niinor
2009-12-09 · TA获得超过2246个赞
知道小有建树答主
回答量:2047
采纳率:0%
帮助的人:1343万
展开全部
C++中一般不用#define来定义常量或者函数
我觉得唯一用到的地方是在防止头文件重复包含的时候#ifndef...#define...#endif

你下面问的*LinkList是一个LNode结构的别名,同样可以用他来创建一个LNode结构对象.
C++里最好把结构,类什么的都看成对象.
LinkList &L,这里就不难理解了吧,LinkList 是对象类型(一个LNode的指针),&L是参数名(等于 &(*LNode) ).

L = new LNode;
new是C++的内建方法,用来开辟内存空间.这里就是为L分配一个LNode结构那么大的内存空间.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sandamailcn
2009-12-09 · TA获得超过743个赞
知道小有建树答主
回答量:541
采纳率:0%
帮助的人:0
展开全部
正常情况下所有的头文件都是
#ifndef ....
#define

//头文件中的内容

#endif
上面的结构是为了不使头文件出现重复包含.
另一种 :
如 #define MAXNUM 500
#define abs(x) ((x)>0 ? (x) : -(x)
是宏.

你说的LinkList是LNode的指针,而&L是LinkList的引用,目的是把程序中分配的LNode返回。
new就是c中的malloc,动态分配一个LNode
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ahouzhena
2009-12-09 · 超过17用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:0
展开全部
第一个问题:
#define是定义宏,楼上说避免使用是什么意思,你如果说GOTO避免使用我很赞同,但是定义宏是个很正常的使用啊。
第2个问题:
*LinkList 指针类型,在这里LinkList就想INT已经成为一个类型了,&L就是一种引用传参,保证传过去的是地址。
NEW就是开辟内存空间,比如 LinkList L 只是定义了一个指针型的变量L,但是指针如果要使用必须要开辟内存空间,所以还要加上 L = NEW LNode();
还有不明白的M我。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式