首页 > 其他分享 >给函数传入结构体和传入该结构体的指针的区别

给函数传入结构体和传入该结构体的指针的区别

时间:2024-10-27 11:45:33浏览次数:7  
标签:按值 传入 函数 myStruct 传递 指针 结构

给函数传入结构体和传入该结构体的指针在 C/C++ 中有以下几个关键区别:

1. 传递方式

  • 传入结构体(按值传递):

    • 当把结构体按值传递给函数时,函数会创建一个结构体的副本。这意味着函数中对结构体的任何修改都不会影响原始结构体的数据,因为修改的只是副本。
    • 副本是结构体的一个独立拷贝,与原始结构体无关。
  • 传入结构体指针(按引用传递):

    • 当把结构体的指针传递给函数时,函数接收到的是原始结构体的地址。这样,函数内部对结构体成员的修改会直接影响原始结构体的数据
    • 指针传递的是地址而不是数据本身,因此不会产生结构体的副本。

2. 内存消耗和性能

  • 按值传递:

    • 如果结构体很大,按值传递会导致大量内存消耗,因为每次调用函数时都需要复制整个结构体。
    • 在这种情况下,性能可能会受到影响,尤其是当结构体包含许多成员时。
  • 按引用传递(传指针):

    • 传递结构体的指针只需要传递一个地址(通常是 4 或 8 个字节,取决于系统架构),这比传递整个结构体要高效得多。
    • 当结构体很大时,使用指针可以显著减少内存开销和函数调用的性能开销

代码举例:

#include <stdio.h>

typedef struct {
    int a;
    int b;
} MyStruct;

// 按值传递
void passByValue(MyStruct s) {
    s.a = 10; // 只修改副本,不影响原始结构体
}

// 按指针传递
void passByPointer(MyStruct* s) {
    s->a = 10; // 直接修改原始结构体的值
}

int main() {
    MyStruct myStruct = {1, 2};

    passByValue(myStruct);
    printf("After passByValue, a = %d\n", myStruct.a); // 输出仍然是 1

    passByPointer(&myStruct);
    printf("After passByPointer, a = %d\n", myStruct.a); // 输出是 10

    return 0;
}

标签:按值,传入,函数,myStruct,传递,指针,结构
From: https://blog.csdn.net/weixin_57904199/article/details/143265854

相关文章

  • C语言入门(6)--控制结构
    C语言控制结构控制结构是C语言中用于控制程序执行流程的基本机制。主要包括顺序结构、选择结构和循环结构。1.顺序结构顺序结构是程序中最基本的控制结构,按照代码的书写顺序从上到下依次执行。示例代码#include<stdio.h>intmain(){printf("第一行\n");......
  • 数组指针的相关知识
    1.数组指针的概念    1.顾名思义,数组指针就是指向数组的指针(地址),要和指针数组做区分。    数组指针:类型为int(*)[常量],是一个地址。    指针数组:是由int*类型之类的指针为元素的数组,是一个数组。    2.数组指针指向的是整一个数组,而非......
  • 指针(进阶)
    1.字符指针2.数组指针3.指针数组4.数组传参和指针传参5.函数指针6.函数指针数组7.指向函数指针数组的指针8.相关的练习指针的主题,我们在初级阶段的《指针》已经接触过了,我们知道了指针的概念:1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2.指针......
  • 【汇编语言】第一个程序(二)—— 带你真正了解一个源程序的结构是怎样的
    文章目录前言1.示例程序2.伪指令2.1XXXsegment2.2end2.3assume3.源程序中的“程序”4.标号5.程序的结构6.程序返回7.语法错误和逻辑错误结语前言......
  • 数据结构入门之复杂度
    前言:终于来到了数据结构。要想学好数据结构,首先就要了解数据结构的复杂度。那么,什么是复杂度呢?1数据结构所谓数据结构(DataStructure)就是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,它取一个或一......
  • 简单区分常量指针和指针常量的小技巧
    指针常量和常量指针介绍推荐一个文章,有介绍指针常量和常量指针,本文就不做另外的篇幅去介绍彻底理解——指针常量和常量指针、指向常量的常指针-CSDN博客区分的方法该方法简单好用,掌握了以后就再也不会分不清这两个东西了只要记住这句话:const默认是修饰它左边的符号的,如果左......
  • C语言——数组、指针、函数
    目录1、数组、指针、函数2、数组指针及指针数组2.1、数组指针2.2、指针数组2.3、区别3、指针函数与函数指针3.1、指针函数3.2、函数指针3.3、区别4、所有组合1、数组、指针、函数    在前面我们已经学习了数组、指针以及函数,看起来都没有难的地方,我自认......
  • 数据结构:(OJ917)仅仅反转字母
    给你一个字符串 s ,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的 s 。示例1:输入:s="ab-cd"输出:"dc-ba"示例2:输入:s="a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba"示例3:输入:s="Test1ng-Leet=code-Q!"输出:"......
  • 数据结构之队列
    一、队列的定义队列是一种操作受限的线性表,队列只允许在表的一端进行插入,在表的另一端进行删除。可进行插入的一段称为队尾,可进行删除的一端称为队头。队列的主要特点就是先进先出。依照存储结构可分为:顺序队和链式队。二、顺序队列一开始front(队头)和rear(队尾)都在数......
  • 在K8S中,体系结构有哪些不同的组成部分?
    Kubernetes(简称K8s)的体系结构是一个复杂但高度组织化的系统,它包含多个不同的组成部分,这些部分协同工作以实现容器化应用程序的自动化部署、扩展和管理。以下是K8s体系结构的详细组成部分:1.控制平面(ControlPlane)控制平面是K8s集群的管理核心,负责整体的集群管理和控制。它包含以......