登录
立即注册
首页
>
绿虎论坛
>
建站
>
主机
(
发帖
)
链表问题
匿名
@Ta
2013-07-20
4327点击
void addrect(rect *head,rect *newrect) { newrect->next=head; head=newrect; }
哪有错,head一直是NULL,没有变…
隐藏样式
查看源码
回复列表(14|
隐藏机器人聊天
)
1
幻阳化翼
@Ta
/ 2013-07-20 /
样
/
源
没头没尾的,谁能看明白
2
匿名
@Ta
/ 2013-07-20 /
样
/
源
小李 你会C?
3
幻阳化翼
@Ta
/ 2013-07-20 /
样
/
源
@
匿名
,学过一点,读过c_primer_plus
4
匿名
@Ta
/ 2013-07-20 /
样
/
源
那你看这个看不懂?
5
匿名
@Ta
/ 2013-07-20 /
样
/
源
那你看这个看不懂?
6
幻阳化翼
@Ta
/ 2013-07-20 /
样
/
源
@
匿名
,你自己写的?
7
老虎会游泳
@Ta
/ 2013-07-20 /
样
/
源
@
匿名
,你怎么调用这个函数的?你链表本身链好了吗?
8
幻阳化翼
@Ta
/ 2013-07-20 /
样
/
源
@
匿名
,你可以把完整代码传上来
9
匿名
@Ta
/ 2013-07-21 /
样
/
源
rect *testhead=NULL;
for(…)
addrect(testhead,newrect(…));
getrects(testhead);
rect *newrect()
{
rect *temp=malloc(sizeof(rect));
temp->next=NULL;
return temp;
}
10
匿名
@Ta
/ 2013-07-21 /
样
/
源
@
幻阳化翼
@
老虎会游泳
换行被吞了,我下午还要上班先睡
11
匿名
@Ta
/ 2013-07-22 /
样
/
源
@
幻阳化翼
@
老虎会游泳
看九楼
12
老虎会游泳
@Ta
/ 2013-07-22 /
样
/
源
@
匿名
,我没看到你哪里给head赋值了啊。
13
匿名
@Ta
/ 2013-07-22 /
样
/
源
怎样才是赋值
@
老虎会游泳
14
老虎会游泳
@Ta
/ 2013-07-22 /
样
/
源
rect *testhead=NULL;
addrect(testhead,newrect(…));
你自己给head赋的NULL,它就一直是NULL啊,函数又不能改变值传递的变量的值。
你肯定很奇怪为什么是值传递,“我明明传递的是一个指针啊。”
对,你传递的确实是一个指针,但是它是这个指针的值(它指向的地址),而不是这个指针自身的地址——程序运行时会自动把这个指针复制一份做为参数,这样你在函数里改变head的指向根本没用。
要在函数改变一个指针,你必须要给指针取地址:
addrect(&testhead,newrect(…));
void addrect(rect **head,rect *newrect) {
newrect->next=*head;
*head=newrect;
}
添加新回复
回复需要
登录
。
for(…)
addrect(testhead,newrect(…));
getrects(testhead);
rect *newrect()
{
rect *temp=malloc(sizeof(rect));
temp->next=NULL;
return temp;
}
addrect(testhead,newrect(…));
你自己给head赋的NULL,它就一直是NULL啊,函数又不能改变值传递的变量的值。
你肯定很奇怪为什么是值传递,“我明明传递的是一个指针啊。”
对,你传递的确实是一个指针,但是它是这个指针的值(它指向的地址),而不是这个指针自身的地址——程序运行时会自动把这个指针复制一份做为参数,这样你在函数里改变head的指向根本没用。
要在函数改变一个指针,你必须要给指针取地址:
addrect(&testhead,newrect(…));
void addrect(rect **head,rect *newrect) {
newrect->next=*head;
*head=newrect;
}