关于结构体的typedef

来源:百度知道 编辑:UC知道 时间:2024/05/15 03:08:09
struct listNode{//自引用
char data;
struct listNode *nestPtr;
};

typedef struct listNode LISTNODE;
typedef LISTNODE *LISTNODE; //前面都OK。这里有点模糊,希望各位大大赐教下·······
有些明白了,再弱弱的区别一下

void insert(LISTNODEPTR *,char);
int isEmpty(LISTNODEPTR)//请问一下这里为什么不需要*???这里的*省略掉了?还是不用?

insert是向这个链表中插入数据,也就是说对链表进行了修改,所以要用指针传递或者引用传递.如果不加*使用值传递的话,那么被修改的只是形参,这个形参只是实参的一个值拷贝,函数执行完后,原链表实际上并未被修改.
isEmpty只是判断链表是否为空,没有对链表进行修改,所以值传递就可以了.

总之,如果要修改实参,那么就要用指针传递或者引用传递.只是对实参进行读操作的话,用值传递就可以了

*号修饰的是左面的变量,即LISTNODE*,这代表一个指针.所以总的意思是把指向LISTNODE的指针(LISTNODE*)起了个别名(typedef)叫LISTNODEPTR.
如定义一个指针:
LISTNODE* ListNodeInstance;
等同于:
LISTNODEPTR ListNodeInstance.注意,这里的ListNodeInstance 是指针类型的.

不可能吧,你是不是看错了,如果参数是LISTNODEPTR的话,肯定不对的,你把代码发我下吧?挺奇怪啊!

定义一个指针,以后在结构体中比如需要使用连接next listnode之类的时候跳转用的吧。