zoukankan      html  css  js  c++  java
  • 结构体,结构体指针作为函数参数的应用笔记

    1. 结构体,结构体指针作为函数参数有何区别

    #include <stdio.h>
    #include <string.h>
    
    struct animal
    {  
        char name[30];    
        int num;
    };
    
    //使用结构体作为参数 浪费内存 需要建立结构体
    void change_struct(struct animal cat)
    {
        cat.num = 17;
    }
    
    //函数内部改变需要地址 所以需要指针保存
    void change_point(struct animal *cat)
    {
        cat->num   = 13;
       // (*cat).num = 1000;//*根据地址取出内容
    }
    
    void main
    {
        struct animal cat = {0};
        struct animal *pcat = &cat;
        cat.num = 20;
    
        change_struct(cat);
        printf("%d",cat.num);  //输出20
    
        change_point(pcat);
        printf("%d",cat.num);  //输出13
    
        cat.num = 28;
        change_point(&cat);    //输出13
        printf("%d",cat.num);
    }

    2. 综上所述,就是传递结构体指针(或者取它的地址)的话,可以修改结构体里面的值。传递结构体的话,不能修改结构体变量的值。

    3. 其中如果传递的是结构体的话,因为C语言的参数传递值调用方式是要求把参数的一份拷贝传递给参数,上面的name这个数组的长度是30,那么这个结构体将占用34个字节的空间,要想把它作为参数传递的,我们必须把34个字节都复制到堆栈中,以后再丢弃。所以传递指针的效率要高非常多。

    4. 我以前以为,可以把结构体名字(实际上必须取它的地址)直接赋值给结构体指针,可能是字符串搞多了吧。

  • 相关阅读:
    [转]<UNIX编程艺术>之精华文字
    2012年学习小结
    重试逻辑代码
    《构建高性能web站点》读书点滴
    mysql体系结构
    设计memcache的部署结构
    一般性hash算法c#版
    Flex带进度条的多文件上传(基于Servlet)
    C++11中值得关注的几大变化
    优化网站响应时间tomcat添加gzip
  • 原文地址:https://www.cnblogs.com/429512065qhq/p/8319192.html
Copyright © 2011-2022 走看看