9. rect *testhead=NULL;
for(…)
addrect(testhead,newrect(…));
getrects(testhead);
rect *newrect()
{
rect *temp=malloc(sizeof(rect));
temp->next=NULL;
return temp;
}
14. rect *testhead=NULL;
addrect(testhead,newrect(…));
你自己给head赋的NULL,它就一直是NULL啊,函数又不能改变值传递的变量的值。
你肯定很奇怪为什么是值传递,“我明明传递的是一个指针啊。”
对,你传递的确实是一个指针,但是它是这个指针的值(它指向的地址),而不是这个指针自身的地址——程序运行时会自动把这个指针复制一份做为参数,这样你在函数里改变head的指向根本没用。
要在函数改变一个指针,你必须要给指针取地址:
addrect(&testhead,newrect(…));
void addrect(rect **head,rect *newrect) {
newrect->next=*head;
*head=newrect;
}