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

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?

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,只有指针参数才需要用->
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-04
宏定义 简单的字符替换 在 编译前做的替换
#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 动态分配内存空间本回答被提问者和网友采纳
第2个回答  2009-12-09
C++中一般不用#define来定义常量或者函数
我觉得唯一用到的地方是在防止头文件重复包含的时候#ifndef...#define...#endif

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

L = new LNode;
new是C++的内建方法,用来开辟内存空间.这里就是为L分配一个LNode结构那么大的内存空间.
第3个回答  2009-12-09
正常情况下所有的头文件都是
#ifndef ....
#define

//头文件中的内容

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

你说的LinkList是LNode的指针,而&L是LinkList的引用,目的是把程序中分配的LNode返回。
new就是c中的malloc,动态分配一个LNode
第4个回答  2009-12-09
第一个问题:
#define是定义宏,楼上说避免使用是什么意思,你如果说GOTO避免使用我很赞同,但是定义宏是个很正常的使用啊。
第2个问题:
*LinkList 指针类型,在这里LinkList就想INT已经成为一个类型了,&L就是一种引用传参,保证传过去的是地址。
NEW就是开辟内存空间,比如 LinkList L 只是定义了一个指针型的变量L,但是指针如果要使用必须要开辟内存空间,所以还要加上 L = NEW LNode();
还有不明白的M我。
相似回答