开发者社区> 问答> 正文

C语言指针作为参数的问题?报错

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的地址,传入的是指针的指针,它没给报错也没给警告,还哟哟地正确初始化了,这是小弟有疑问的地方.

展开
收起
爱吃鱼的程序员 2020-06-22 22:50:18 613 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    是不是这个问题太菜鸟了,没人理我-- 建议继续重读指针开头那几页和函数原型

    楼主

    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:垃圾数据

    什么环境什么编译器啊?linuxgcc有警告,也没有正确初始化。。。<divclass="ref">

    引用来自“中山野鬼”的答案

    <divclass=ref_body>

    楼主

    main里面

    typeL;

    表示你申请了一个指针空间L,里面将要存在一个数值,是指向另一个空间,那个空间会是type类型。

    &L获取了L自身的地址,给了initlist。

    而initlist根据这个地址,申请了一个type空间,并把这个空间,存放在给入的L里面。是否理解了?

    LZ你要指针的指针才能将里面的参数初始化完然后将值从参数返回的说。

    Type L;//L是Type指针

    initList(&L);//传入L指针的地址


    这两句的问题, 函数声明时候需要一个TypeL你传递给他的是一个TypeL.

    传递的是一个指针的指针。 这个错误在编译的时候都会告诉你类型错误了。

    <divclass="ref">

    引用来自“艾米”的答案

    <divclass=ref_body><divclass="ref">

    引用来自“中山野鬼”的答案

    <divclass=ref_body>

    楼主

    main里面

    type*L;

    表示你申请了一个指针空间L,里面将要存在一个数值,是指向另一个空间,那个空间会是type类型。

    &L获取了L自身的地址,给了initlist。

    而initlist根据这个地址,申请了一个type空间,并把这个空间,存放在给入的L里面。是否理解了?

    voidinitList(TypeL){//L是Type指针的地址

       L=(Type)malloc(sizeof(Type));

      (*L)->length=0;
    }


    2020-06-23 11:44:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载