首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++学习————第四天(类、this指针)

4个字节才能是8的整数倍,最后总和为24字节,刚好也是8的倍数,所以最终结构体大小为 24字节 注意 : 有类型可以算,有对象也可以算。...对象占用的大小 只考虑成员变量 也不考虑其私有还是公有 注意 : 空类大小是 1 这一个字节不存储有效数据 只是用来标识对象被定义出来 7.2 结构体内存对齐规则 1....VS中默认的对齐数为8 可以用 #pragma pack(1) //设置默认对齐数为1 3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。 4....,因为静态成员函数没有this指针,只有非静态成员函数才有,且为隐藏指针. 5、this可以为空,单纯的对this赋空是不可以的,不过可以强转直接赋空,不过一般不进行这样的操作 1. this指针存在哪里...当我们在调用函数的时候,如果函数内部不需要通过this指向当前对象并对其进行操作时才可以为空(当我们在其中什么都不放或者在里面随便打印一个字符串);如果调用的函数需要指向当前对象,并进行操作,则会发生错误

9710

C语言:动态内存分配+经典面试题

realloc在调整内存空间时存在两种情况: 1、空间足够的话,在原来的空间尾部开辟新的空间 2、在另一个位置开辟一个足够大小的内存空间,并且将原来空间中的数据全部拷贝过去 使用: #include...5、多次用free释放同一块空间 这里就就体现将指针置空的重要性了。 如果使用完将指针置空,再次free释放的时候编译器什么事情都不会干。...柔性数组 结构体中最后一元素允许是未知大小的数组。 通常格式:类型 数组名[ ] 或者 类型 数组名[0]      结构中的柔性数组成员前面必须至少一个其他成员。...包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。 arr就是一柔性数组。...一般是用malloc来开辟空间大小来存储含有柔性数组的结构,并且大小要大于结构体的大小,以适应柔性数组的大小。 开辟的空间除了其他元素以外剩下的空间就是留给柔性数组的。

77530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】初识面向对象:类与对象详解

    并且其中一个类可以实例化出多个对象,并且占用实际的物理空间用于存储成员变量。打个比方:类实例化出对象就像现实中使用建筑设计图建造出房子,类就像设计图。...char _a;};【问题】:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?...7.2 this指针的特性this指针的类型:类类型*const ,既成员函数中,不能给this赋值this指针不能显示在实参和形参的位置,只能在成员函数的内部使用this指针本质上是成员函数的形参,当对象调用成员函数时...当数据结构按照特定的字节边界对齐时,处理器可以更有效地读取和写入内存,减少了内存访问的次数和时间。这样可以提高数据读取速度,减少内存碎片化,并且可以避免一些硬件平台上的异常行为。...了解大小端是确保不同系统之间数据正确传递和解释的关键因素。7.this指针可以为空吗?this指针指向调用成员函数的对象,因此在对象存在时,this指针不会为空。

    10000

    C++心决之类和对象详解(上篇)(封装入门篇)

    注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。...注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8 3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。 4....(即该指针只能指向由该类型实例化出来的某一个对象的成员变量,不能更改其指向) 2....只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...如果不同过对象调用类的成员函数,则this指针指向空就不会报错,反之就会报错(因为你基于某个对象调用该类型的成员函数,就必须将对象的地址传给this指针,确保this指针可以访问到该对象的成员变量)

    16910

    【C】动态内存函数——大全(基本,简洁,包教会,适合初学)

    的返回值一定要检查 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定 如果参数size为0,malloc的行为是未定义的,取决于编译器 情景1:申请内存空间失败...,拓展方法:在堆空间上另外找一个合适的连续空间来使用,这样函数返回的是一个新的内存地址 情景4:realloc调整空间时,申请内存的起始位置是空指针 申请内存起始位置是空指针时:等价于malloc...情景三:对非动态开辟的内存使用free释放 / 对同一块动态开辟的内存多次释放 解决方法:把p指针置为NULL,则无影响 情景四:使用free释放一块动态开辟内存的一部分 在释放时,p指针已经移动...C99中,结构中的最后一个元素允许是未知大小的数组 柔性数组的两种写法: 有些编译器无法编译时,可以改成: 1.柔性数组的特点 结构中的柔性数组成员前面必须至少有一个其他成员 sizeof...返回这种结构大小,不包括柔性数组的内存 包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小 柔性数组的体现——可以更改数组的大小

    15310

    C++(类和对象)

    类中既有成员变量也有成员函数,那我们需要计算成员函数的大小吗? 用编译器运行一下 可以看到编译器在计算时并没有计算成员函数的大小,只计算了成员变量的大小。...只能在“成员函数”的内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。...,因为编译器生成了一个无参的默认构造函 数 // 将Date类中构造函数放开,代码编译失败,因为一旦显式定义任何构造函数,编译器将不再 生成 // 无参构造函数,放开后报错:error C2512...如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。 以上就是析构函数和构造函数

    9310

    【C++】类与对象理解和学习(上)

    也可以理解为这是一个自定义类型,与C语言中的结构体(struct)颇有类似。...,我们用struct来定义一个结构体,那么定义一个与它同类型的变量要写成struct xxx的形式,而C++中用struct来定义一个结构体,那么同类型的变量则可以省略struct。...类的两种定义的方式: 一种是将成员函数定义在类里面(编译器可能会当成内联函数处理) 另一种是将成员函数声明与定义分离(工作中推荐第二种) 这里需要注意的是,在类中定义成员函数以及成员变量时,不需要考虑定义的先后顺序...第一个成员在与结构体偏移量为0的地址处。 2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。...,this是不可被修改的,this实际上就是实例化对象的地址 this只能在成员函数内部使用 this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参

    48140

    探索动态内存开辟的奥秘

    数组空间大小一旦确定就不能更改。 2.0 动态内存 有时候我们需要的空间⼤⼩在程序运⾏的时候才能知 道,那数组的编译时开辟空间的⽅式就不能满⾜了。...size_t 用于表示内存大小的数据类型,是一个无符号整数类型。malloc中size表示字节个数。 使用: 如果开辟成功,则返回⼀个指向开辟好空间的指针。...使用: 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。 如果参数 ptr 是NULL指针,则函数什么事都不做。 返回值: 不反回任何值。...包含柔性数组成员的结构⽤malloc ()函数进⾏内存的动态分配,并且分配的内存应该⼤于结构的⼤⼩,以适应柔性数组的预期⼤⼩。...优势有2: 1.方便内存释放:在函数给其他人使用时,代码在里面进行了二次分配,并把整个结构体返回给⽤ ⼾。⽤⼾调⽤free可以释放结构体,但是⽤⼾并不知道这个结构体内的成员也需要free。

    9510

    C语言 | C++之sizeof使用

    sizeof 值与指针所指的对象类型没有任何关系,与指针申请多少空间没有关系,所有的指针变量所占内存大小均相等。...如果使用 32 位编译器编译得到程序是 32 位,那么在 64bits 系统下,指针变量大小仍然是 4 个字节。...结构体的大小等于结构体内最大成员大小的整数倍 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说 double 型成员相对于结构体的首地址的地址偏移量应该是 8 的倍数。...sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾 编译器在编译时就计算出了 sizeof 的结果,而 strlen 函数必须在运行时才能计算出来。...并且 sizeof 计算的是数据类型占内存的大小,而strlen 计算的是字符串实际的长度。 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。

    2.8K88

    CC++基础之sizeof使用

    sizeof 值与指针所指的对象类型没有任何关系,与指针申请多少空间没有关系,所有的指针变量所占内存大小均相等。...如果使用 32 位编译器编译得到程序是 32 位,那么在 64bits 系统下,指针变量大小仍然是 4 个字节。...结构体的大小等于结构体内最大成员大小的整数倍 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说 double 型成员相对于结构体的首地址的地址偏移量应该是 8 的倍数。...sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾 编译器在编译时就计算出了 sizeof 的结果,而 strlen 函数必须在运行时才能计算出来。...并且 sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。 数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。

    35430

    《C Primer》笔记(下篇)

    对于struct pnames类型的结构变量,字符串存储在编译器存储常量的地方。结构本身只存储了两个地址,在我们系统中共占16字节,这个结构不用为字符串分配任何存储空间,它使用的是存储在别处的字符。...由于这是未经初始化的变量,地址可以是任何值,因此程序可以把名字存储在任何地方,这一操作可能导致程序崩溃 结构、指针和malloc() 在上一节中,如果使用malloc()分配内存并使用指针存储该地址,...因为char的对齐值是1,所以对于普通的char类型变量,编译器可以使用任何地址。...:常量定义、结构声明、类型定义和函数原型等 通常需要使用#ifndef和#define来防止多重包含头文件 使用头文件时必须编译和链接对应的源代码文件 头文件一般包含的内容为: 明示常量:EOF、NULL...我们可以重新定义结构来解决这个问题,即每个结构中包含指向next结构的指针,当创建新结构时,可以把该结构的地址存储在上一个结构中,以film数据结构为例: #define TSIZE 45 /* 存储的电影名数组大小

    2.2K40

    C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)

    类-->对象 —— 1-->多 类对象模型 如何计算类对象的大小 类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小?...结论:一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。 结构体内存对齐规则 1....在大多数现代编译器和硬件上,这样的调用可能不会立即导致崩溃,因为 this 指针通常只在函数内部需要访问成员变量时才会被使用。 但是,这并不意味着通过空指针调用成员函数是安全的或推荐的做法。...尽管在源代码中你并不会显式地看到 this 指针的传递和使用,但编译器会在编译时为你处理这些细节。 this指针可以为空吗?...这是因为即使函数体内不直接访问任何成员变量,成员函数被调用时仍然需要一个有效的 this 指针来作为上下文。当这个上下文不存在(即你试图通过一个空指针来调用成员函数)时,程序的行为就是未定义的。

    16110

    类和对象的初步接触与定义

    ; }; 问题:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?...,实际就是该类中”成员变量”之和,当然要注意内存对齐 注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。...VS中默认的对齐数为8 3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。 4....只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针。...首先由于两者定义这个类新变量时,定义的为类的指针且指向的为空指针(这是一种没事找事的写法,这里写的目的仅仅是想提升大家对于this的理解),我们都知道空指针是不能解引用的,看到这里可能有同学可能会恍然一悟

    42020

    【C++修炼之路】2. 类和对象(上)

    ,又可以有成员函数,那么一个类的对象中包含了什么?...注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。...只能在“成员函数”的内部使用 this指针本质上是“成员函数的“的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递 【面试题】 this指针存在哪里?(栈、堆、静态区、常量区) this指针可以为空吗?...注:空指针是运行错误,编译是检查不出来的。(因此上述的空指针错误是运行错误。)

    37300

    C语言:动态内存管理

    但是有些时候我们对于空间的需求并不仅仅满足于此,可能我们需要的空间大小是在函数运行时才能够知道,那么数组编译时开辟的空间无法满足我们的需求。...此错误原因依照全局变量errno的值来决定要输出的字符串。 在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。...• sizeof 返回的这种结构大小不包括柔性数组的内存。 • 包含柔性数组成员的结构⽤malloc ()函数进⾏内存的动态分配,并且分配的内存应该⼤于结构的⼤ ⼩,以适应柔性数组的预期大小。...一定要注意,如果在结构体中使用柔性数组,就一定要动态内存开辟,否则就没有柔性数组空间的大小,因此为了能够返回开辟空间的地址,一般我们在使用时创建结构体指针变量。...所以,如果我们把结构体的内存以及其成员要的内存⼀次性分配好了,并返 回给用户⼀个结构体指针,用户做⼀次free就可以把所有的内存也给释放掉。

    15210

    C++ Primer Plus 第四章 复合类型 学习笔记

    整型数组 数组的大小是指定元素的数目,必须是整型常数或const值,也可以是常量表达式(8*sizeof(int)) 1.3 复合类型的数组 可以使用其他的类型来创建(C语言使用术语:派生类型) 数组的用途...4.2 结构的定义: struct(关键字) 类型名(标记成为新类型的名称) { 结构成员1; 结构成员2; 结构成员3; };//(结束结构声明) 对于结构中的成员,使用成员运算符...infor Soler_infor {"Soler HO",55,168}; // 在C++11中,= 号可以省略 如果大括号内未包含任何东西,各个成员都将设置为零。...4.4 成员赋值 成员赋值(memberwise assignment):可以使用赋值运算符(=)将结构赋另一个同类型的结构。这样结构中的每个成员都将被设置为另一个结构中相应成员的值。即使成员是数组。...如果标识符是指向结构的指针,则使用箭头运算符(->)。 把new用于结构的两个步骤 创建结构要创建结构,需要同时使用结构类型和new。 创建访问其成员。

    1.8K00

    C语言重点突破(五) 动态内存管理

    有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。 这时候就只能试试动态存开辟了。 2....返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。 如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。  ...这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到 新 的空间 当对一个空指针使用realloc函数时,其效果相当于对该指针使用melloc函数开辟空间。...sizeof 返回的这种结构大小不包括柔性数组的内存。 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。...所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。 第二个好处是:这样有利于访问速度.

    18210

    后台开发:核心技术与应用实践 -- C++

    凡是函数体相同的函数都可以用这个模板来代替,而不用定义多个函数,实际使用时只需在模板中定义一次就可以了。在调用函数时,系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能。...当数组名作为参数传入时,实际上数组已经退化为指针了,它的功能是返回字符串的长度。 sizeof()是运算符,而不是一个函数,在编译时就计算好了,用于计算数据空间的字节数。...当参数分别如下时 sizeof 返回的值表示的含义如下所述: 数组一一编译时分配的数组空间大小 指针一一存储该指针所用的空间大小(int类型大小,32位机器为4 Byte) 类型一一该类型所占的空间大小...而 虚函数 的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。...在C++中,,构造函数不能声明为虚函数,这是因为编译器在构造对象时,必须知道确切类型,才能正确地生成对象;其次,在构造函数执行之前,对像并不存在,无法使用指向此对像的指针来调用构造函数。

    1.3K10

    C语言中的柔性数组 C语言结构体中char和char的用法

    柔性数组成员前面必须至少有一个其它类型成员。包含柔性数组成员的结构要用malloc进行动态内存分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。...,所以要分别管理即申请和释放)而如果使用数组,那么只需要一次就可以全部分配出来,反过来,释放时也是一样,使用数组,一次释放,使用指针,得先释放结构体内的指针,再释放结构体。...C99使用不完整类型实现柔性数组成员,在C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组(flexible array)成员(也叫伸缩性数组成员),但结构中的柔性数组成员前面必须至少一个其他成员...柔性数组成员允许结构中包含一个大小可变的数组。柔性数组成员只作为一个符号地址存在,而且必须是结构体的最后一个成员,sizeof 返回的这种结构大小不包括柔性数组的内存。...柔性数组成员不仅可以用于字符数组,还可以是元素为其它类型的数组。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

    2.9K31

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券