在主函数调用时,将数据传递给形参x,y,在函数体内判断两个书中较大的数,并通过return语句返回值返回给函数的调用者 注意: 参数的数据说明可以省略,默认值是int类型 函数名称需要遵循标识符命名规范...函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参。也就是改变形参不会影响实参的值。...A) 主函数中定义的变量是全局变量 B) 同一程序中,全局变量和局部变量可以同名 C) 全局变量的作用域从定义处开始到本源程序文件结束 D) 局部变量的作用域被限定在其所定义的局部范围中 答案...6.3.3 结构体指针做函数参数 通过示例来复习吧:计算学生成绩的平均分 注意:通过传入结构体指针,这样可以减少内存的占用,在传入结构体数组时,会将它所占用的内存单元的内容全部作为参数传递给形参,在函数调用的过程中...FILE是头文件当中的一个结构体,所以可以直接使用 FILE *fp = fopen("demo.txt", "r"); 判断是否打开成功 如果打开失败会返回一个空指针,因此可以通过返回的指针来判断文件是否打开成功
指针:定义指针变量:指针的类型 指针名;使指针指向一个变量: 指针名=&变量名;变量的类型和指针的类型应该相同,此时*指针就相当与这个变量,例如 int *a=&m; *a=k;则是将k的值赋给m;另外还可以定义指向指针的指针...类型 const 指针;这种方式定义的指针地址只能是固定的不可以再进行改变。 3. .const 类型const 指针:指针指向的内存不能改变,并且指针指向的值不能进行改变。...s.empty()判断字符串s 是否为空。s.size();返回s中字符个数。 s.c.str() 将字符串转换为字符数组。string类的变量比较是通过字典序进行比较。...同一容器中两个迭代器,一个迭代器指向的位置前于另一个迭代器,则前者小于后者。而迭代器也分为许多种,上面的迭代器可以读写并访问容器中所有的元素。...-1);} } 参数传递传值和传引用传值时,实参和形参是两个独立的对象,即行参在函数中的变化并不影响实参的变化,在传引用时实参和形参被绑定在一起,即行参的变化也会引起实参的变化。
而对于指针传递的参数,如果改变被调函数中的指针地址,它将应用不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量(地址),那就得使用指向指针的指针或者指针引用。...作为参数时也不同,传指针的实质是传值,传递的值是指针的地址;传引用的实质是传地址,传递的是变量的地址。 野(wild)指针与悬空(dangling)指针有什么区别?如何避免?...当数据成员中没有指针时,浅拷贝是可行的。 但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针指向同一个地址,当对象快要结束时,会调用两次析构函数,而导致指野指针的问题。...当一个对象需要以值方式进行传递时,编译器会生成代码调用它的拷贝构造函数生成一个副本,如果类 A 的拷贝构造函数的参数不是引用传递,而是采用值传递,那么就又需要为了创建传递给拷贝构造函数的参数的临时对象,...但如果有多处对 lib 文件中同一个函数的调用,那么执行时该函数将在当前程序的执行空间里留下多份拷贝,而且是一处调用就产生一份拷贝。
将地址传递和值传递统一起来,归根结底还是传递的是"值"(地址也是值,只不过通过它可以找到另一个值)!...,如内置数据类型或者小型结构,则按照值传递; 如果数据对象是数组,则使用指针(唯一的选择),并且指针声明为指向const的指针; 如果数据对象是较大的结构,则使用const指针或者引用,已提高程序的效率...这样可以节省结构所需的时间和空间; 如果数据对象是类对象,则使用const引用(传递类对象参数的标准方式是按照引用传递); 3) 对于修改函数中数据的函数: 如果数据是内置数据类型,则使用指针 如果数据对象是数组...当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是this指针。...如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数; 4) 因为可以把调用者与被调用者分开。
类的成员函数并不与具体对象绑定,所有的对象共用同一份成员函数体,当程序被编译后,成员函数的地址即已确定,这份共有的成员函数体之所以能够把不同对象的数据区分开来,靠的是隐式传递给成员函数的this指针,成员函数中对成员变量的访问都是转化成...因此,从这一角度说,成员函数与普通函数一样,只是多了this指针。而类的静态成员函数只能访问静态成员变量,不能访问非静态成员变量,所以静态成员函数不需要this指针作为隐式参数。...此外,静态变量的初始化顺序可能会受到编译单元(源文件)中其他静态变量初始化顺序的影响,因此在跨编译单元的情况下,静态变量的初始化顺序可能是不确定的。...函数传参使用对象的引用 effective C++中也提到了:以pass-by-reference-to-const替换pass-by-value 指在函数参数传递时,将原本使用"pass-by-value...这段话的意思是,shared_ptr 的所有成员函数(包括复制构造函数和复制赋值运算符)都可以由多个线程在不同的 shared_ptr 实例上调用,即使这些实例是副本并且共享同一个对象的所有权。
成员指针概述: 当初始化一个这样的指针时,我们令其指向类的某个成员,但是不指定该成员所属的对象 直到使用成员指针时,才提供成员所属的对象 成员指针是指可以指向类的非静态成员的指针 一般情况下,指针指向一个对象...与指向数据成员的指针类似,我们也可以声明一个指向于成员函数的指针 语法注意事项: 指向成员函数的指针也需要指定目标函数的返回类型和形参列表 如果成员函数时const的或者是引用成员,则我们必须将const...,先定义一个静态成员Menu,该成员是指向光标移动函数的指针的数组 定义一个move函数,使其可以调用上面的任意一个函数并执行对应的操作 设计一个枚举用于函数传参 class Screen {public...因为成员指针不是可调用对象,所以我们不能直接将一个指向成员函数的指针传递给算法 例如,下面在一个vector中寻找第一个空的string: std::vector svec;auto...我们也可以采取另一种方法,就是使用标准库功能mem_fn来让编译器负责推断成员的类型 mem_fn也定义在functional头文件中,并且可以从成员指针生成一个可调用对象 和function不同的是:
this作用域是在类内部,而且是在类的非静态成员函数中使用,实际引用并操作对象a的成员。 当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。...(摘自c语言中文网) 1.this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。...同样如果有b.volume( ) ,编译系统就把对象b的起始地址赋给成员函数volume的this指针,显然计算出来的是长方体b的体积。this指针是隐式使用的,它是作为参数被传递给成员函数的。...自从类的函数定义完成后,它就在那儿,不会跑的。 #4:this指针如何访问类中变量的? 如果不是类,而是结构的话,那么,如何通过结构指针来访问结构中的变量呢?...#6:每个类编译后,是否创建一个类中函数表保存函数指针,以便用来调用函数? 一般来说,对于类成员函数(不论是静态还是非静态的成员函数)都不需要创建一个在运行时的函数表来保存。
全局静态变量:存储在静态存储区,静态存储区中的资源在程序运行期间会一直存在,直到程序结束由系统回收。未初始化的变量会默认为0,作用域在声明他的文件中有效。...难记点(我是感觉很SB,除了面试,实际工作中完全没遇到): const char* p = new char(‘a’): 表示p指向的内容不可修改但是p可修改。...sizeof指针可以得到指针本身大小,sizeof引用得到的是变量本身大小。指针传参还是值传递,引用传参传的是变量本身。 4.如何理解多态 定义:同一操作作用于不同的对象,产生不同的执行结果。...如果一个类中包含虚函数,那么这个类就会包含一张虚函数表,虚函数表存储的每一项是一个虚函数的地址。...QMutex的目的是保护一个对象/数据结构或者代码段在同一时间只有一个线程可以访问。
c++中操作符就是一种函数,因为它可以重新定义。 所有的成员函数都带着一个隐藏dispointer,指向调用者。...complex类实现过程 注意:成员函数实现重载,作用在运算符左边。传进来的参数是另一个。...因为拷贝了指针,这两个指针指向的是同一块内容空间。 class with pointer members 只要了类带着指针,就要写拷贝构造和拷贝赋值,析构函数。...——Big Three三个特殊函数。 class里面有指针,多半是要动态内存分配。 因为传递的是指针,创建的这两个class中的data就是一个指针,如果就使用编译器的否拷贝构造函数。...那么就会使得这两个指针指向的是同一块内存空间。 并且会导致另一块没有指针指向的内存空间引起memory leak(内存泄漏)。 ——这就是我们所说的浅拷贝。
C和C++都有结构的概念,但是在C语言中结构只有成员变量没有成员方法,而在C++结构中,它可以有自己的成员变量以及成员方法。...传参方式有这三种:值传递、引用传递、指针传递 值传递:形参即使在函数体内值发生变化,也不会影响实参的值; void foo(int x) { x = x * 2; // 修改的是副本,不会影响原始数据...strcpy 是标准C库函数,用于将一个字符串复制到另一个字符串中。然而它不检查源字符串的长度,可能会导致缓冲区溢出,引发安全漏洞。...结构体的比较,怎么判断两个对象是否相等 需要逐个比较它们的成员变量(字段) 继承关系中的子类能访问父类哪些成员变量以及成员函数 在继承关系中,子类(派生类)通常可以访问父类(基类)的以下成员变量和成员函数...c++中A类访问B类中的私有成员的解决方法 使用友元函数或友元类:B类中声明A类为友元,或者在A类中声明B类为友元 提供公有成员函数或接口:如果希望B类的私有成员被A类间接访问,可以在B类中提供一些公有成员函数或接口
全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。...等传递给main函数,然后才真正运行main函数 main函数执行之后: 全局对象的析构函数会在main函数之后执行 可以用 atexit 注册一个函数,它会在main 之后执行 3、C...,而引用在初始化之后不可再改变 sizeof指针得到的是本指针的大小,sizeof引用得到的是引用所指向变量的大小 当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,两者指向的地址相同...在任何同一时刻,union值存放了一个被先选中的成员,而结构体struct的所有成员都存在。 27、什么是野指针和悬空指针?...浅拷贝: 在拥有指针成员的类中,一个对象利用拷贝构造函数或者赋值函数拷贝或者赋值给另一个对象的时候,直接将这个对象的指针成员赋值给另一个对象的指针成员,将一个指针赋值给另一个指针,就会使两个指针指向同一个空间
⑤只有在类的非静态成员函数中才可以使用this指针,其他任何函数都不可以。...可能是栈,也可能是寄存器,甚至全局变量。 this指针是如何访问类中的变量的? 如果不是类,而是结构的话,那么,如何通过结构指针来访问结构中的变量呢?如果你明白这一点的话,那就很好理解这个问题了。...在C++中,类和结构是只有一个区别的:类的成员默认是private,而结构是public。this是类的指针,如果换成结构,那this就是结构的指针了。...当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。 每个类编译后,是否创建一个类中函数表来保存函数指针,以便来调用函数?...但是,既使是虚函数,如果编译器能明确知道调用的是哪个函数,编译器就不会通过函数表中的指针来间接调用,而是会直接调用该函数。 this指针如何传递给类中函数的?绑定?
C++中,我们可以将函数放在结构体内,这种写法在C语言中会发生报错,但在C++中是合法的,也就是说在C语言中不能将属性和行为进行分离。...说的没错,this指针是看不见的,但是却实际存在,实际上: 在类中,非静态成员函数 的 参数列表中 会 自动生成 this指针,this指针 指向该类创建的对象的内存空间(前面说了,类成员函数不占用类空间...答:如果只调用 类的静态成员函数 那就不会有任何影响,因为静态成员函数也不需要类内部成员变量,但是如果调用 非静态成员函数 的话就一定会发生 空指针引 用的报错,这点和C一样。...其实,我们前面也说了,编译默认的拷贝构造是只会进行值传递方式拷贝,然而值传递对于像栈这种数据结构来说,指针_a也是值传递,也就是同一份地址的拷贝,而我们知道,在对象声明周期结束时会自动调用该类的析构函数...,在首次函数传参的时候,函数结束时会调用一次析构函数,但是问题是这里拷贝的指针和原类的成员指针指向的是同一片空间,所以函数结束时调用析构会销毁这片空间,在原对象生命周期结束时又会调用一次析构函数,但是原来已经给指针是放过一次了
但是在引用或指针传递函数调用中,因为传进去的是一个引用或指针,这样函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参所指向的变量。...因为在编译阶段编译器对调用函数的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来。...55、值传递、指针传递、引用传递的区别和效率 1) 值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象 或是大的结构体对象,将耗费一定的时间和空间。...this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候(全局函数,静态函数中不能使用this指针),编译器会自动将对象本身的地址作为一个隐含参数传递给函数。...如果你明白这一点的话,就很容易理解这个问题了。 在C++中,类和结构是只有一个区别的:类的成员默认是private,而结构是public。
编译器通过下面 注释部分去完成操作 C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有...只能在“成员函数”的内部使用 3. this指针本质上是“非静态成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递,this指针是非静态成员函数的隐含形参....例如: \ 3、返回指向对象的指针 在成员函数中,如果想要返回指向对象的指针,就可以使用this指针。...2.this关键字只能用于成员函数,不能用于被static修饰的函数(静态函数),因为静态成员函数没有this指针,它们仅能访问静态数据成员和静态成员函数 3.在C++中,this关键字是一个指向对象自己的一个指针
; 由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长; 调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数...(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。 ...C中的static函数 分类 static 函数内部函数和外部函数 当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。...内部函数 (又称静态函数) 如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。 ...使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。...它能安全地将指向基类的指针转型为指向子类的指针或引用,并获知转型动作成功是否。转型失败会返回 null(转型对象为指针时)或抛出异常 bad_cast(转型对象为引用时)。...而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。...拷贝构造函数用来初始化一个非引用类类型对象,如果用传值的方式进行传参数,那么构造实参需要调用拷贝构造函数,而拷贝构造函数需要传递实参,所以会一直递归。...this 指针调用成员变量时,堆栈会发生什么变化 当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是 this 指针。
它是非静态成员函数的一个隐式参数,只有在调用类的非静态成员函数时,this 指针才会被传递给函数。简单来说,this 指针表示调用该函数的具体对象的地址。...3.1、this 指针的基本特性 this 是一个指针:指向当前对象的内存地址。 隐式传递:this 指针是由编译器自动提供的,无需显式传递。...Value = 20 3.3、this指针的本质 在底层实现中,this 指针是通过编译器隐式传递给非静态成员函数的 class MyClass { public: void func() {...this 指针 return 0; } 编译器会自动将 this 指针传递给成员函数,因此在函数内部可以访问调用对象的成员。...静态函数无法访问非静态数据成员,因为它们不依赖于具体对象,没有this指针 3.5、this指针的存储和传递 this 指针的存储位置: this 指针并不是一个变量,而是由编译器在函数调用时隐式传递给非静态成员函数的一个指针
7.this指针 C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量...只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递 8.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。...只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递 this的定义 const指向this,this不能改,指向的可以改,const Dat
领取专属 10元无门槛券
手把手带您无忧上云