就是给了这块内存一个机器,直接在上面操作了,不需要复制一个新的地方在操作。 当函数参数是指向基本数据类型的指针时,函数可以修改传递给它的变量的值。...这通常用于模拟“传值传引用”的机制,即通过指针将数据传递给函数,从而使函数能够直接修改原始数据。...这种函数 传了个结构体进来 指针也可以指向结构体,这允许函数操作结构体的成员,而不需要复制整个结构体。通过指针传递结构体,能够节省内存和提高效率,尤其是在结构体较大时。...-> 运算符用于通过指针访问结构体的成员。...通过数组指针,函数可以访问和修改数组中的元素。 modifyArray 函数接收一个指向整数数组的指针(int* arr)。通过该指针,函数可以访问并修改数组的每个元素。
金句分享: ✨今天所有的混乱与芜杂,努力与精进,都将在进步中变得更加清晰.✨ 目录 前言 一、结构体的声明 二、结构体变量的定义与初始化 三、结构体传参 结构体是什么?...结构体是用来描述复杂对象的一种 变量,结构体中的成员可以是多种不同类型的变量. 例如:结构的成员可以是 标量、 数组、 指针,甚至是其他 结构体....char id[20];//学号 }; 这段代码表示声明了一个结构体类型名为struct stu,成员就是不同类型的成员变量....方法二:与其它全局变量一样,在主函数(main())外面定义即可. 提示一下:在操作符章节提到了结构体成员访问操作符(.)...我们可能会觉得上面的打印显得较为繁琐,我们不妨将打印封装为一个函数,打印时直接调用该函数呢?
1.传递结构体成员 > 只要结构体成员是一个具有单个值的数据类型,便可把它作为参数传递给接受该特定类型的函数。 > 使用这种方式为函数传递参数与普通变量作为参数相同,都是以传值的方式传递的。...运算符的优先级很高,高于&取址运算符,但是仍然建议加上括号,是表达更加清晰。 2.传递结构体 > 使用结构体变量作为函数的参数时,也是传值的,会将结构体变量的全部内存单元的内容拷贝一份传递给被调函数。...被调函数的形参也必须是同类型的结构体类型。...为了解决以上问题,使用结构体指针是一个更好的办法。 > 需要注意的是,结构体变量名与数组变量名不同,结构体变量名不是它的地址。...modify中,要使用指向运算符->访问结构体成员或者使用括号,因为他的参数是一个结构体指针 > 实参还有第二种写法,将实参直接定义为结构体指针 struct book { float price
结构体的介绍 在C语言中,结构体是一种用户自定义的数据类型,它允许开发者将不同类型的变量组合在一起,形成一个新的数据类型。...结构体类型:用来定义多个不同类型的变量,形成一个新的数据类型。结构体中可以包含基本数据类型、枚举类型、数组、指针等。 指针类型:表示变量的地址。 数组类型:表示一组相同类型的变量。...: 传值传参 将结构体的副本传递给函数。...); 传地址传参 将结构体的指针传递给函数,以便在函数内部修改结构体的内容。...这是因为函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。此外,传递结构体地址也便于我们修改结构体的内容。
break语句结束 default子句用于处理case未匹配的情况 六、控制语句-循环 while循环 while(条件) { //循环体 } 特点:当条件为真时,循环体会一直执行 当条件为假时...函数是一种用来完成特定任务的代码块,可以被多次调用 函数的作用:提高代码的复用性,简化复杂程序,增强可读性 函数的语法结构: 返回值 函数名(参数列表) { //函数体 } int add(int...传值调用:将参数的值传递给函数,函数内部对参数的修改不会影响外部变量 传址调用:将参数的地址传递给函数,函数内部可以修改实际的变量值(通过指针) 传值调用 传址调用: 5,数组与函数 数组作为函数参数时...,传递的是数组的首地址,因此数组作为参数时,函数内的修改会影响原数组 main()函数的位置可以任意放置 练习:编写一个程序,其中自定义一个函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数...移动的距离取决于指针的类型 p是int*类型,每次+1,移动的距离是sizeof(int),也就是4个字节 十、结构体、字符串和预处理 1.结构体 结构体的定义和声明 结构体成员的访问 2.字符串 3.
作用 拷贝构造函数的主要作用是实现对象的深拷贝或浅拷贝。 深拷贝:在内存中为对象分配新的空间,并复制源对象的所有成员(包括动态分配的内存)。...主要是因为: 避免无限递归 如果拷贝构造函数的参数是传值方式,那么在调用拷贝构造函数时,编译器会尝试创建一个临时对象来传递给该函数。这个临时对象的创建又会调用拷贝构造函数,从而导致无限递归。...MyClass obj1; MyClass obj2 = obj1; // 调用拷贝构造函数 2.函数参数传递: 当一个对象作为值参数传递给函数时。...3.函数返回值: 当一个函数返回一个对象(作为值)时,会调用拷贝构造函数来构造返回的对象。...拷贝构造函数不能被声明为const,因为它需要修改(初始化)目标对象。 拷贝构造函数必须是可访问的,以便在需要时能够被调用。
对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个个实例。 识别一个类可以分为哪三步? ①识别类名。 ②识别数据成员。...当调用成员函数a.disp()时,编译系统就会把对象a的起始地址赋值给this指针,于是在成员函数引用数据成员时,就可以通过this指针索引到对象a的数据成员。...③如果参数个数确定,this指针通过ecx传递给被调用者,如果参数不确定,this指针在所有参数被压栈后压入堆栈。 ④对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈。...this指针是如何访问类中的变量的? 如果不是类,而是结构的话,那么,如何通过结构指针来访问结构中的变量呢?如果你明白这一点的话,那就很好理解这个问题了。...静态成员函数并不是针对某个类的实例对象,而是属于整个类的,为所有的对象实例所共有。它在作用域的范围内是全局的,独立于类的对象之外的。它只对类内部的静态成员变量做操作。
在子组件中使用props来获取值子组件给父组件传值 在组件中传递一个函数 在子组件中用props来获取传递的函数,然后执行该函数 在执行函数的时候把需要传递的值当成函数的实参进行传递兄弟组件之间传值...是一个函数用于处理逻辑array 控制useMemo重新执⾏行的数组,array改变时才会 重新执行useMemo不传数组,每次更新都会重新计算空数组,只会计算一次依赖对应的值,当对应的值发生变化时,才会重新计算...缺点∶ hoc传递给被包裹组件的props容易和被包裹后的组件重名,进而被覆盖(2)Render props 官方解释∶"render prop"是指一种在 React 组件之间使用一个值为函数的 prop...最典型的应用场景:当父组件具有overflow: hidden或者z-index的样式设置时,组件有可能被其他元素遮挡,这时就可以考虑要不要使用Portal使组件的挂载脱离父组件。...在React底层,主要对合成事件做了两件事:事件委派: React会把所有的事件绑定到结构的最外层,使用统一的事件监听器,这个事件监听器上维持了一个映射来保存所有组件内部事件监听和处理函数。
: 计算时把嵌套中的结构体作为一个数据类型去计算,最大对齐数也要与其比较,故有时候会出现最大对齐数为3,5的情况(结构体中包含一个char数组,数组大小为奇数)。...否则,我们可能需要执行两次内存访问,因为对象可能被分放在两个8字节内存块中。 那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到: 让占用空间小的成员尽量集中在一起。...printf("%d\n", sizeof(struct S)); return 0; } 五、结构体传参 值传递: 在值传递中,结构体的副本被传递给函数。...指针传递: 在指针传递中,结构体的地址被传递给函数,函数内部通过使用指针来访问和修改结构体的内容。这种方式可以避免结构体的副本创建,因此对于大型结构体更为高效。...当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。
3.结构成员的类型 结构体的成员变量可以是什么类型呢? 结构的成员可以是标量、数组、指针,甚至是其他结构体。...那该如何访问成员? 两种方式: 我们可以对该结构体指针解引用,这样就找到了对应的结构体变量,然后我们就可以使用(.)操作符来访问成员变量了。...那我们先来计算一下s3的大小和每个成员的对齐数吧,正好练习一下: 直接上图吧: 那接下来我们是不是应该思考一下,被嵌套的这个结构体s3,它应该对齐到哪个位置呢?...那我们将结构体作为函数参数进行传参也是这样: 1.传值调用:直接将结构体变量作为实参传递给形参,形参将是实参的一份临时拷贝。...2.传址调用:将结构体变量的地址作为实参传递给形参,用一个结构体指针接收,传址调用可以通过形参改变结构体变量的值,而传值调用不能。
,以存放各元素的值,而对字符指针变量,只占4各字节(不同编译器可能不同) 指针变量的值是可以改变的,而字符数组名代表一个固定的值,不能改变 5.6 指针作为函数返回值 当函数的返回值是一个指针时,把这个函数称为指针函数...在使用指针函数时要注意,函数运行结束后会销毁在它内部定义的所有局部数据,函数返回的指针不要指向这些数据 5.7 练习题 ?...特别注意:结构体的变量名和数组名不同,数组名在表达式中会被转换为数组指针指向数组的第一个元素,而结构体变量名不会因此需要带上&取地址符噢~ 6.3.1 获取结构体成员 有两种获取的方法,一种是采用成员访问运算符...6.3.3 结构体指针做函数参数 通过示例来复习吧:计算学生成绩的平均分 注意:通过传入结构体指针,这样可以减少内存的占用,在传入结构体数组时,会将它所占用的内存单元的内容全部作为参数传递给形参,在函数调用的过程中...在代码的第10行我们给共用体成员i赋值0x62,会被存入内存中的第一个字节中,当给ch赋值为'9'时,字符9的ascII码为57,对应的16进制就是0x39,因此第一个字节中会被改写成39,这样成员i的值也被改变了
3.类的访问限定符及封装(面试题) (1) 访问限定符 【访问限定符说明】 public修饰的成员在类外可以直接被访问 protected和private修饰的成员在类外不能直接被访问(此处protected...用类类型创建对象的过程,称为类的实例化 定义出一个类并没有分配实际的内存空间来存储,它实例化出的对象 占用实际的物理空间,存储类成员变量。...6.类对象模型 如何计算类对象的大小 只需要计算成员变量的大小(注意内存对齐),不需要计算成员函数的大小,无论定义多少对象,成员函数就只有一个是公用的....注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 结构体总大小:最大对齐数(所有变量类型最 大 者与默认对齐参数取最 小 )的整数倍。...this指针赋值 只能在成员函数的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参所以对象中不存储this指针。
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员,结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据,成员又称为成员变量...但是前提是这两个结构体变量的结构体类型必须相同 结构体的运算:要访问整个结构,直接用结构变量的名字,对于整个结构,可以做赋值,取地址,也可以传递给函数参数 结构体数值 嵌套的结构体: struct week...结构体函数与函数参数 结构体做函数形参: 整个结构可以作为参数的值传入函数,这时候是在函数内新建一个结构变量,并复制调用者结构的值,也可以返回一个值,这和数组完全不同 用结构体变量作实参时,采取的也是“...当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。...3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。
这样,当需要改变这个常量的值时,就不需要对整个程序一个一个进行修改,只需修改宏定义中的常量即可。且当常量比较长时,使用宏就可以用较短的有意义的标识符来代替它,这样编程的时候就会更方便,不容易出错。...但是前提是这两个结构体变量的结构体类型必须相同 结构体的运算:要访问整个结构,直接用结构变量的名字,对于整个结构,可以做赋值,取地址,也可以传递给函数参数 结构体数值 嵌套的结构体: struct week...结构体函数与函数参数 结构体做函数形参: 整个结构可以作为参数的值传入函数,这时候是在函数内新建一个结构变量,并复制调用者结构的值,也可以返回一个值,这和数组完全不同 用结构体变量作实参时,采取的也是“...当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。...或者说同前面介绍的普通数组的定义是一模一样的:struct student tp[10]; 这就定义了一个结构体数组,共有 10 个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。
它其实就是数组访问的操作符。...=10的时候,越界访问了 } return 0; } //当i=10的时候,越界访问了 二维数组的行和列也可能存在越界 2.4 数组作为函数参数 2.4.1 数组元素作为函数参数 数组可以作为函数的参数使用...,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存释放掉 第二个好处是:有利于访问速度 连续的内存有益于提高访问速度,也有益于减少内存碎片 3.结构体 3.1 结构体类型的声明 3.1.1...,而是指向一个结构体的指针 那该如何访问成员,如下 结构体指针->成员名 3.6 结构体传参 3.6.1 传值调用 3.6.2 传地址调用 函数传参的时候,参数是需要压栈的,会有时间和空间上的系统开销...16,32位机器最大32,写成27,在16位机器会出问题 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义 当一个结构体包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,
当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。...按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。 ...按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数的值,调用代码中的原始值也随之改变。...如果函数修改了该参数的地址,调用代码中的原始值不会改变。 值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中,对形式参数值的改变不影响实际参数的值。 引用传递:也称为传地址。...对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值;但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象
) 派生类自己的构造函数 必须使用成员列表初始化的四种情况 当初始化一个引用成员时 当初始化一个常量成员时 当调用一个基类的构造函数,而它拥有一组参数时 当调用一个成员类的构造函数,而它拥有一组参数时...所有其他的非静态数据成员都不会被初始化 如何消除隐式转换 C++中提供了 explicit 关键字,在构造函数声明的时候加上 explicit 关键字,能够禁止隐式转换 如果构造函数只接受一个参数...当进程调用 malloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用 free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减) 栈(stack) 栈又称堆栈,是用户存放程序临时创建的局部变量...this 指针调用成员变量时,堆栈会发生什么变化 当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是 this 指针。...某个时刻只能有一个 unique_ptr指向一个给定对象。当 unique_ptr 被销毁时,它所指向的对象也被销毁。
那么它的地址范围就是 0 ~ 4294967296 ,十六进制表示就是 0x00000000~0xffffffff ,当程序使用的数据载入内存时,都有自己唯一的一个编号,这个编号就是这个数据的地址。...这就意味着:这种数据传递是单向的,即从调用者传递给被调函数,而被调函数无法修改传递的参数达到回传的效果。...指针作为函数的形参的另一个典型应用是当函数有多个返回值的情形。比如,需要在一个函数中统计一个数组的最大值、最小值和平均值。当然你可以编写三个函数分别完成统计三个值的功能。...结构体指针有特殊的语法: -> 符号 如果p是一个结构体指针,则可以使用 p ->【成员】 的方法访问结构体的成员 typedef struct { char name[31]; int...(因为若直接删除,另外对象中的指针就会无效,形成所谓的野指针,而访问无效指针是危险的; 除非这些指针有引用计数或者其它手段确保被指对象的所有权);而深复制在浅复制的基础上,连同指针指向的对象也一起复制,
类的访问限定符 访问限定符说明: public修饰的成员在类外可以直接被访问 protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止...,类外可以访问 private修饰的的成员是私有的类外不能访问 注意:成员函数不管成员变量是私有还是公有,它都能直接访问,因为它们都属于这个类 5....,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?...C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问 this指针的特性 this指针的特性...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
由于内存中的每一个字节都有一个唯一的编号,因此,在程序中使用的变量,常量,甚至数函数等数据,当他们被载入到内存中后,都有自己唯一的一个编号,这个编号就是这个数据的地址。指针就是这样形成的。...内存数据的生命周期 num是main函数中的局部变量,因此当main函数被启动时,它被分配于栈内存上,当main执行结束时,消亡。...结构体和指针 结构体指针有特殊的语法: -> 符号 如果p是一个结构体指针,则可以使用 p ->【成员】 的方法访问结构体的成员。p->member 等价于 (*p).member。...当把数组名赋值给一个指针后,再对指针使用sizeof运算符,返回的是指针的大小。 这就是为什么我么将一个数组传递给一个函数时,需要另外用一个参数传递数组元素个数的原因了。...这就意味着:这种数据传递是单向的,即从调用者传递给被调函数,而被调函数无法修改传递的参数达到回传的效果。