|
10鱼币
本帖最后由 killkk 于 2014-4-9 15:54 编辑
没有贴全部代码,只贴了部分的。
全部代码我已经手动输入并调试了很多次了。也可以正常运行。
但现在有个疑问。请看以下红色部分:
1, 为什么有的地方使用指针指向成员 如: Sqlist *L(L->length), 而有的地方直接使用的点成员如:Sqlist L(L.length)
2, 我已经尝试将它们全部(红色字体)改成 Sqlist *L 或Sqlist L 也可能正常运行,得到正确结果。
3, 指针指向成员 L->length 和 L.length 效果不是一样的吗?为什么代码中有的地方这样用,有的地方却那样用呢?
4, 甲鱼老师在讲视此频教程的时候说过为什么要这样用的,但后面他没说原因,可能是他忘了?谁能帮忙解释一下呢,非常感谢!
/* 初始化顺序线性表 */
Status InitList(SqList *L)
{
L->length=0;
return OK;
}
/* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */
Status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
/* 初始条件:顺序线性表L已存在。操作结果:将L重置为空表 */
Status ClearList(SqList *L) // Status ClearList(SqList L) 比如这里改成这样也行啊!!
{
L->length=0; // L.length = 0;
return OK; // return OK;
}
/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */
int ListLength(SqList L)
{
return L.length;
}
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0 || i<1 || i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */
/* 若这样的数据元素不存在,则返回值为0 */
int LocateElem(SqList L,ElemType e)
{
int i;
if (L.length==0)
return 0;
for(i=0;i<L.length;i++)
{
if (L.data==e)
break;
}
if(i>=L.length)
return 0;
return i+1;
}
|
最佳答案
查看完整内容
不好意思啊,才看到你的问题。如果定义的是结构体指针的话,就要用“->”;如果定义的是普通的结构体,就要用“.”。二者在实际应用中效果一样。但是如果想作为函数的参数的话,就要看传进去的是普通的结构体变量还是结构体指针了。传指针的目的是使结构体指针指向的数据在函数执行后发生变化,而传普通的结构体变量则不能在函数执行后改变结构体内的值~不知道这么说你明白了没有...
|