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

乔海权_429512***杭州 乔海权_429512***杭州     2022-10-10     347

关键词:

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

 

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

参考技术A传结构体地址与传结构体指针二者都可以作为传出参数,因为接受函数必须为其定义一个结构指针来接收,这样在函数内就可以修改结构体,在这点上二者没有区别。定义结构体指针未分配地址空间就作为参数传递会... 查看详情

c语言结构体(结构体数组作为函数参数|数组在堆内存创建)(代码片段)

文章目录一、结构体数组作为函数参数(数组在堆内存创建)二、完整代码示例一、结构体数组作为函数参数(数组在堆内存创建)在上一篇博客【C语言】结构体(结构体数组作为函数参数|数组在栈内存创建)的基础上,将栈内存中的结... 查看详情

如何将不同类型的结构体作为一个函数的参数?

定义一个函数,需要将不同类型的结构体作为参数传递进去,请问怎样实现?这个参数定义为什么类型的呢?(可以用来接收不同的结构体)可以利用函数的重载。比如说定义了两个结构体A和B,函数func()为要接受不同参数的函数... 查看详情

调用一个动态库中的函数,这个函数有一个参数是结构体指针,我如何使用这个指针?

我是希望利用动态库中的结构体指针,它就好比是一个返回值。在我自己的函数里定义了一个结构体指针,将其传递给这个动态库中的函数,将动态库函数中的结构体指针赋给我定义的结构体指针,但其值并不是动态库函数中结... 查看详情

c语言结构体(结构体数组作为函数参数|数组在栈内存创建)(代码片段)

文章目录一、结构体数组作为函数参数(数组在栈内存创建)二、完整代码示例一、结构体数组作为函数参数(数组在栈内存创建)声明结构体类型:定义结构体数据类型,同时为该结构体类型声明别名,可以直接使用别名结构体变量名... 查看详情

20170908_郝斌c结构体

为什么要结构体结构体知识点1结构体的赋值和初始化StructStudent{intage;chargender;floatscore;};2   取出结构体中的每一个成员结构体.成员结构体指针变量名->成员3 结构体变量和结构体指针变量作为函数参数传递时的问... 查看详情

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

参考技术A结构体指针与结构体变量用作函数参数区别:(1)结构体指针作为函数参数时,调用时传递的是指向一个结构体变量的指针(即结构体变量的地址);结构体变量作为函数参数时,调用时传递的结构体变量本身。(2)... 查看详情

c语言关于结构体做参数传递?

...变了。学生一枚,求大神解释一下参考技术A双指针C语言结构体传参小-黯原创关注7点赞·2315人阅读目录C语言结构体传参1.普通传参1.1测试代码1.2测试结果1.3结果分析2.单指针传参2.1修改结构体数据2.1.1测试代码2.1.2测试结果... 查看详情

17-结构体

 本文目录一、什么是结构体二、结构体的定义三、结构体变量的定义四、结构体的注意点五、结构体的初始化六、结构体的使用七、结构体数组八、结构体作为函数参数九、指向结构体的指针 天来学习C语言中另外一种... 查看详情

c语言结构指针变量作函数参数和链表基础

结构体变量作为函数参数(传递整个结构体):指向结构体变量的指针作为实参(传递结构体的地址):数据结构之链表:      查看详情

c基础结构体(代码片段)

目录一、结构体struct的定义和.操作符的使用二、结构体的创建和初始化三、结构体的内存对齐模式3.1结构体强转其他类型四、指定结构体元素的位字段(bit)五、结构数组5.1结构体数组的冒泡排序六、结构体嵌套七、结构体的赋值... 查看详情

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

例如我定义了一个嵌套的结构体。structpointintx,y;;structlinestructpointstart;structpointend;;那么我在定义一个函数求线段长度时如何利用指针来作为函数的参数?这个指针要怎么表示?line*就可以啊。如果想这个参数的内容不被修改,可... 查看详情

语法*第九章*5结构体指针作为函数参数(代码片段)

#include<stdio.h>structstudentintnum;charname[20];floatscore;stu=112301,"bowen1",20;voidprint(structstudent*p);intmain(void)print(&stu);voidprint(structstudent*p)printf("%d%s%0.1f",p- 查看详情

c++基础3(函数指针结构体)(代码片段)

...针const修饰指针指针和数组指针和函数指针、数组、函数结构体结构体基本概念结构体定义和使用结构体数组结构体指针结构体嵌套结构体结构体做函数参数结构体中const使用场景结构体案例案例1案例2函数函数的定义函数的定义... 查看详情

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

structLNode intdata; structLNode*next;*LinkList;//结构体。intListTraverse(LinkListl,void(*vi)(int))//函数 LinkListp=l->next; while(p) vi(p->data); p=p->next printf("\n"); returnOK;错误:error:expected‘)’before‘LinkList’帮忙解决。。。谢谢!structLN... 查看详情

c语言-结构体(代码片段)

结构体结构体类型数据的定义和引用方法一.结构体类型的概念定义结构体变量定义结构体类型变量的方法引用结构体成员成员引用引用结构体数据成员的方法整体引用初始化结构体变量结构体嵌套和用指针引用结构体成员指向... 查看详情

go语言学习之旅--结构体(代码片段)

结构体go语言类型定义go语言类型别名go语言类型定义和类型别名的区别结构体go语言结构体的定义声明一个结构体变量结构体的初始化访问结构体成员匿名结构体结构体指针举例使用new关键字创建结构体指针访问结构体指针成员... 查看详情

c语言中,结构体作为函数参数传递,详解?

1.可以把结构体作为参数啊,2.不去取地址的意思,是引用的意思,函数执行时修改L的值,就直接的修改了实参的值,相当于地址传递了。3.真正调用的时,如下:SqListtempStruct;InitList_Sq(tempStruct)这样就可以了。呵呵参考技术A结... 查看详情