学习中遇到的一些问题~~(持续更新)

问题1:

关于C的指针:

下面是正确的代码:

typedef struct {

int data;

}SqList;



void InitList(SqList *&L){

L = (SqList *)malloc(sizeof(SqList));

printf("L initialized/n");

}



void DestList(SqList *L){

free(L);

printf("L destroyed/n");

}



void main(){

SqList *L;

InitList(L);

DestList(L);





}



其中void InitList(SqList *&L)

为什么是SqList *&L?

我改成SqList *L为什么就提示指针L没初始化?

void InitList(…………)里的参数性质不是应该和void DestList(…………)里的一样么?





答:

首先 这段程序不会报错是会警告
然后 你的程序逻辑 或者说程序思想有问题
void InitList(SqList *&L)这个函数是用来分配一个Sqlist的空间对吧
一般的方法是
Sqlist* InitList(){
Sqlist *L = (SqList *)malloc(sizeof(SqList));
return L;
printf("L initialized/n");
}
或者
void InitList(SqList *&L){
L = (SqList *)malloc(sizeof(SqList));
printf("L initialized/n");
}
这里SqList *&L 是对L的一个引用
下面来分析一下你的为什么有问题
主要的原因是你没有搞清楚函数参数的传递问题
比如 由函数定义void a(int* x);
然后调用时
int *b;
f(b);
这里面的x等于是f()里的一个临时变量 你调用f(b)是 是把b的值给了x 而不是X就是b了
所以对于你那个程序
SqList *L;
InitList(L);
这就相当于 将L中存的地址付给了 InitList()里的L(注意这两个L不是一个变量)然后你给InitList()里的L分配了一个空间 这丝毫不会影响
main()里面的L,main()里面的L以前啥样现在还啥样。
所以是用我说的第一种方法 正式把再InitList()里分配的空间地址 返回出来 返回给main()里面的L这样就达到目的了
而对于 第二种方法 SqList *&L 这是对L的一个引用也就是说 加上&后InitList()里的L和main()里的L就是一个变量了 当然你对InitList()
里的L改动也就相当于改动了main()里的L了
现在你明白了吗
(void DestList(SqList *L)这个函数因为他只是释放一个空间所以 给他个地址就行了他 释放你给他的那块地址对应的空间 而不去考虑这个地址
在哪个变量中存着)
关于指针的问题 本来就不是很容易理解 不过随着你进一步的学习和了解 你会柳暗花明又一村的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值