注册 登录
编程论坛 数据结构与算法

被线性表里的函数参数SqList L,SqList &L,SqList *L搞懵了,求大神指点

asdqq 发布于 2015-07-11 10:53, 2570 次点击
书里的用的是SqList  &L,但是上网上看下其他代码发现很多用*L,然后又说C语言里没用引用,所以用*L,但是把&L改成*L就报错,然后改着改着把&漏掉了,发现SqList L竟然没报错,所以感觉有点晕了,顺便帮忙看下代码有错么,C语言学了1个学期没用有点忘记,拜托!谢谢啦!
#include<stdio.h>
#include<malloc.h>
#define SIZE 100
typedef struct{
    int *elem;
    int length;
    int listsize;
}SqList;
void InitList(SqList &L)
{
    L.elem=(int *)malloc(SIZE * sizeof(int));
    if(!L.elem)
        printf("存储分配失败!");
    L.length=0;
    L.listsize=0;
        printf("存储分配成功!");
}
void main(SqList &L)
{
   
    InitList(L);
}
1 回复
#2
vvvcuu2015-07-27 11:57
当你没有弄明白一些基本的东西而纠结一些稍微高级点的用法的时候,你会越纠结越迷茫的.

如果对SqList L不明白的话, 那么int L,int &L, int *L这几个能说一下区别吗?

关于&是引用运算符的说法是C++中的概念,  在C中,&就只有两种用法:  逻辑与和取地址. 这两种用法的区别是一眼就能看出来的(对于刻意写的那种让人看不明白的代码没有讨论的价值, 正常人不会写那种代码的).  

对于SqList L,SqList &L,SqList *L,  首先记得SqList是指的一个结构体类型,就像int一样,是一种数据类型.
所以SqList L是定义一个结构体变量L,一般用于一段代码的开始, 或者一个函数的开始.
    SqList &L是取结构体变量L的地址, 一般用于函数参数中;
    SqList *L是定义一个结构体指针变量L,  这里要注意和SqList L的区别.
1