结构体,结构体指针作为函数参数的应用笔记

Posted 乔海权_429512***杭州

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体,结构体指针作为函数参数的应用笔记相关的知识,希望对你有一定的参考价值。

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

 

以上是关于结构体,结构体指针作为函数参数的应用笔记的主要内容,如果未能解决你的问题,请参考以下文章

结构体指针与结构体变量用作函数参数时有啥区别,在用法上

C 语言结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

c语言 结构体的指针作为函数参数问题

结构体作为函数参数值传递的问题

在C代码中将结构体变量作为参数传递效率忒低

结构体数组怎么做函数参数