美文网首页
C语言结构体传值和传址及内存使用

C语言结构体传值和传址及内存使用

作者: 玉宾 | 来源:发表于2020-08-13 19:37 被阅读0次

    毕业了,想留的人没能留住,想要的生活也没有如约而至,也就这样了。。。

    ----  网易云热评

    一、结构体值传递

    #include <stdio.h>

    #include <time.h>

    #include <stdlib.h>

    #include <string.h>

    struct Aiyou

    {

           int year;

           char* name;

           char* zdg;

    };

    //声明一个函数setaiyou,参数是一个指针

    void setaiyou(struct Aiyou aayy)

    {

           printf("专辑名称:%s,主打歌:%s,发行时间:%d\n", aayy.name, aayy.zdg,  aayy.year);

    }

    int main() {

           struct Aiyou ay;

           ay.year = 2016;

           ay.name = "周杰伦的床边故事";

           ay.zdg = "告白气球";

           printf("专辑名称:%s,主打歌:%s,发行时间:%d\n", ay.name, ay.zdg, ay.year);

            //调用该函数,将ay对象传递过去

           setaiyou(ay);

           system("pause");

           return 0;

    }

    运行结果:

    二、结构体地址传递

    #include <stdio.h>

    #include <time.h>

    #include <stdlib.h>

    #include <string.h>

    struct Aiyou

    {

           int year;

           char* name;

           char* zdg;

    };

    void setaiyou( const struct Aiyou *p)

    {

           printf("专辑名称:%s,主打歌:%s,发行时间:%d\n", p->name, p->zdg, p->year);

    }

    int main() {

           struct Aiyou ay;

           ay.year = 2016;

           ay.name = "周杰伦的床边故事";

           ay.zdg = "告白气球";

           printf("专辑名称:%s,主打歌:%s,发行时间:%d\n", ay.name, ay.zdg, ay.year);

           setaiyou(&ay);

           system("pause");

           return 0;

    }

    1、const struct Aiyou *p

    const 修饰 *,指针指向的内存不能修改,例如:p->year=2015,编译就会报错

    2、struct Aiyou * const p

    const  修饰p,指针不能修改,例如:p=NULL,编译就会报错

    运行结果:

    三、结构体在堆区分配空间

    #include <stdio.h>

    #include <time.h>

    #include <stdlib.h>

    #include <string.h>

    struct Aiyou

    {

           int year;

           char* name;

           char* zdg;

    };

    int main() {

           struct Aiyou *ay;

           ay = (struct Aiyou *)malloc(sizeof(struct Aiyou));

    if(ay==NULL)

    {

        pritf("分配内存失败");

    return 0;

    }

           ay->year = 2016;

           ay->name = "周杰伦的床边故事";

           ay->zdg = "告白气球";

           printf("专辑名称:%s,主打歌:%s,发行时间:%d\n", ay->name, ay->zdg,  ay->year);

    if(ay!=NULL)

    {

       free(ay);//释放内存

    p=NULL;

    }

           system("pause");

           return 0;

    }

    运行结果:

    三、成员指针在堆区分配空间

           ay.zdg = (char*)malloc(strlen("告白气球")+1);

           strcpy_s(ay.zdg,10,"告白气球");

    欢迎关注公众号:顺便编点程

    相关文章

      网友评论

          本文标题:C语言结构体传值和传址及内存使用

          本文链接:https://www.haomeiwen.com/subject/mlpidktx.html