c语言 调用机制

来源:百度知道 编辑:UC知道 时间:2024/09/27 09:29:53
下面两个程序,第一个调用函数不成功,运行出错。第二个可以,为什么改为返回指针类型就可以了啊???更具函数调用机制,调用完后释放空间,第一个与第二个有什么不同,为什么会牵着不成功,后者可以。请高手解释调用记事。调用时内存开辟与释放???
——————————————————————————————————
#include <stdio.h>
#include <stdlib.h>

typedef struct{
int a;
int b;
}stu;

void create(stu* l);

void main(){
stu* L=NULL;
create(L);
printf("%d %d!!!\n",L->a ,L->b );

}

void create(stu* l){
l=(stu*)malloc(sizeof(stu));
l->a =101;
l->b =102;
printf("%d %d\n",l->a,l->b);
}
——————————————————————————————————
#include <stdio.h>
#include <stdlib.h>

typedef struct{
int a;
int b;
}stu;

stu* create();

void main(){
stu* L;
L=create();
printf("%d %d!!!\n",L->a ,L->b );

}

stu* create(){
stu* l;
l=(stu*)ma

第一个函数调用失败,根本原因是你传递的函数参数stu* L是指针值,因此实参L和形参l在内存中是两个不同的指针变量,你对形参l的赋值不会影响到实参L

你如果想这样传指针给函数,那么应该在调用时传递指针的地址,即:
create(&L);

然后把函数的形参定义成为指针的指针,即:
void create(stu** l)
{
*l=(stu*)malloc(sizeof(stu));
*l->a =101;
*l->b =102;
}

这样,你在函数create中就可以操作实参指针所指向的地址了。

当然指针的指针稍显复杂,你可以用第二种方法,比较直观。

在baidu中搜“C语言 形参和实参”,自己看懂区别后,再来看这段程序。