首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于数据结构中的2个小疑点,求围观,求解释!

2013-04-02 
关于数据结构中的2个小问题,求围观,求解释!!!!1.#define MaxSize 50typedef int ElemTypetypedef struct

关于数据结构中的2个小问题,求围观,求解释!!!!
1.


#define MaxSize 50
typedef int ElemType;


typedef struct 
{
ElemType data[MaxSize];
int length;
}SqList;


void CreateList(SqList * &L,ElemType a[],int n)
{
int i;
L = (SqList *)malloc(sizeof(SqList));
for(i = 0; i < n; i++)
L->data[i] = a[i];
L->length = n;
}

那么void CreateList(SqList * &L,ElemType a[],int n)这句中的SqList * &L是什么意思,L是一个指针还是什么,因为以前遇到的都是SqList *L或者SqList &L 的形式,所以请解释详细点,新手谢谢了。
还有,这是个void的函数,那么在子函数中申请空间为什么不用返回指针,主函数怎么找得到这个在子函数中的指针L,还有,为什么要这样用,有什么好处吗,直接SqList *L这样用不行吗。

2.

#include<stdio.h>

int main(void)
{
int i = 1;

void display const (int) ;

display(i);

return 0;
}
void display const (int i)
{
printf("i = %d\n",i);
}

我主要是想问const在这个函数中应该加在哪里,上面的程序不能运行,我主要想表明在子函数中不能修改传入的值,在没有类的情况下,在主函数中怎么用const。

[解决办法]
void CreateList(SqList * &L,ElemType a[],int n)传入的参数就是实参自己本身而不是副本,
第二个不想改变传入的值const该为参数int的修饰值void display (const int i)
[解决办法]
引用:
void CreateList(SqList * &amp;L,ElemType a[],int n)传入的参数就是实参自己本身而不是副本,
第二个不想改变传入的值const该为参数int的修饰值void display (const int i)

++
[解决办法]
如果是SqList *L,你能在这个函数中改变传进来的链表么?

加一级引用才行。
或者SqList **L一样的
[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

[解决办法]
void CreateList(SqList * &L,ElemType a[],int n)
这里首先声明的是一个指针,而且是引用,你想想,若是直接用拷贝指针,那个指针L所指向的分配的地址,仅仅是L指向它,而你传进去的指针并没有指向这块分配的地址,因为你拷贝一份并没改变你传入指针的值。这样就会内存泄露了。
[解决办法]
第一个问题,L是个结构体指针。SqList * &L应该是一个指向结构体地址的指针。分配内存得出的地址是为了找到后面数据处理的入口。VOID函数用完后,地址就没有用了,而数据在处理的时候就已经写入了。
第二个不想改变传入的值const该为参数int的修饰值void display (const int i) 
[解决办法]
void CreateList(SqList * &L,ElemType a[],int n)
这个多半是伪码,取C++中引用的表示方法

[解决办法]
引用:
void CreateList(SqList * &amp;L,ElemType a[],int n)
这个多半是伪码,取C++中引用的表示方法


肯定用了严师太的伪代码~。。
[解决办法]
只要记住,C函数中参数传递都是值传递,这个问题就解决了,C里面没有引用传递,说引用传递的都是误人子弟
另外 二级指针在C里面太常用了

热点排行