typedef struct{//结构
char data[LENGTH];
int length;
}Type;
void initList(Type *L){//L是Type指针
L = (Type *)malloc(sizeof(Type));
L->length=0;
}
void main(){
Type *L; //L是Type指针
initList(&L);//传入L指针的地址
}
小弟请问前辈们,为什么上面的initList(Type *L)正确地把main函数里面的指针L给初始化了? 我给initList(Type *L)函数传入的是指针L的地址,他是不是应该报个错上面的,然后忘记给我报了呀?小弟理解的是initList函数应该这么写:
void initList(Type **L){// L是Type指针的指针 *
*L = (Type *)malloc(sizeof(Type));
(*L)->length=0;
}
我知道从小弟理解的initList函数里面可以化简成上面的那个initList函数,但是initList(Type *L)传入的是Type指针L的地址,传入的是指针的指针,它没给报错也没给警告,还哟哟地正确初始化了,这是小弟有疑问的地方.
是不是这个问题太菜鸟了,没人理我-- 建议继续重读指针开头那几页和函数原型
楼主
main里面
typeL;
表示你申请了一个指针空间L,里面将要存在一个数值,是指向另一个空间,那个空间会是type类型。
&L获取了L自身的地址,给了initlist。
而initlist根据这个地址,申请了一个type空间,并把这个空间,存放在给入的L里面。是否理解了?
回复<aclass='referer'target='_blank'>@leo108:???啥意思?哈。老鬼也掉坑里了?&是取地址操作符。设L本身地址0x1234,指向地址0x5678,则&L值即0x1234。
栈:调用前:
0x1234:0x5678
0x1232:垃圾数据
0x1230:垃圾数据
栈:执行中:
0x1234:0x5678
0x1232:returnaddress
0x1230:0x1234(子函数局部变量L)
栈:返回后:(设malloc返回地址0xABCD)
0x1234:0xABCD
0x1232:垃圾数据
0x1230:垃圾数据
楼主
main里面
typeL;
表示你申请了一个指针空间L,里面将要存在一个数值,是指向另一个空间,那个空间会是type类型。
&L获取了L自身的地址,给了initlist。
而initlist根据这个地址,申请了一个type空间,并把这个空间,存放在给入的L里面。是否理解了?
LZ你要指针的指针才能将里面的参数初始化完然后将值从参数返回的说。
Type L;//L是Type指针这两句的问题, 函数声明时候需要一个TypeL你传递给他的是一个TypeL.
传递的是一个指针的指针。 这个错误在编译的时候都会告诉你类型错误了。
<divclass="ref">楼主
main里面
type*L;
表示你申请了一个指针空间L,里面将要存在一个数值,是指向另一个空间,那个空间会是type类型。
&L获取了L自身的地址,给了initlist。
而initlist根据这个地址,申请了一个type空间,并把这个空间,存放在给入的L里面。是否理解了?
voidinitList(TypeL){//L是Type指针的地址
L=(Type)malloc(sizeof(Type));
(*L)->length=0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。