<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ff0823的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ff0823</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ff0823]]></copyright><item><title><![CDATA[#函数探幽]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/146092625</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/146092625</guid><author>ff0823</author><pubDate>Mon, 10 Mar 2025 20:52:06 +0800</pubDate><description><![CDATA[内联函数与其他函数的区别（这必须深入到程序的内部）：编译的最终产品是可执行程序-----它是由机械语言指令组成。在调用函数时，函数会立即保存该指令地址，并且把参数复制到栈堆（为此保留内存块），调到函数的起点的内存单元执行代码，也许还需将返回值放入寄存器中，跳回到地址保存指令处。第一行的代码，关键字template，typename，尖括号是必须的，可以使用class来代替typename。（2）使用const使用函数时可以使用const和非const的实参，否则只能接收非const的数据。]]></description><category></category></item><item><title><![CDATA[C++模板]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/142824224</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/142824224</guid><author>ff0823</author><pubDate>Fri, 11 Oct 2024 21:41:19 +0800</pubDate><description><![CDATA[(1)，重载的函数仅仅是类型的不同，代码的复用率比较低，只要有新的类型出现，用户需要自己添加相应的函数。函数模版代表了一个函数家族，该函数模版与类型无关，在使用方式要参数化，根据实参类型产生特定的函数模版。注：如果类型不匹配，编译器会尝试隐式类型转换，如果转换后还编译不成功就要报错。(2)，代码的可维护性差，一个出错所有的重载都会出错。用来定义模版参数的关键字，也可以用。]]></description><category></category></item><item><title><![CDATA[C++继承]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/142767513</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/142767513</guid><author>ff0823</author><pubDate>Thu, 10 Oct 2024 15:22:22 +0800</pubDate><description><![CDATA[（6）写析构函数时只需要写派生类的析构函数，因为编译器会对析构函数名进行特殊的处理，处理成destructor（），所以父亲类的析构函数不加virtual时，基类和派生类的析构函数构成隐藏关系。（1）  派生类的构造函数必须调用基类的构造函数积累的那一部分成员。（3）派生类的operator=，当有基类的operator=时需要调用基类的完成复制。（2）派生类拷贝构造时，当有基类的成员函数时需要调用积累的拷贝构造完成拷贝初始化。（4）派生类的初始化先调用基类的初始化再调用派生类的构造。]]></description><category></category></item><item><title><![CDATA[类和对象（下）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/139564713</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/139564713</guid><author>ff0823</author><pubDate>Sun, 09 Jun 2024 19:49:23 +0800</pubDate><description><![CDATA[3. malloc申请空间时，需要手动计算空间大小并传递，new只需在其后跟上空间的类型即可， 如果是多个 对象，[]6. 申请自定义类型对象时，malloc/free只会开辟空间，不会调用构造函数与析构函数，而new在申请空间。5. malloc申请空间失败时，返回的是NULL，因此使用时必须判空，new不需要，但是new。不同的地方是：new/delete申请和 释放的是单个元素的空间，new[]和。申请的是内置类型的空间，new和malloc。1.在空间上执行析构函数，完成对象资源的清理。]]></description><category></category></item><item><title><![CDATA[类和对象（下）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/139536615</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/139536615</guid><author>ff0823</author><pubDate>Sat, 08 Jun 2024 18:02:46 +0800</pubDate><description><![CDATA[友元函数可以直接访问类的私有成员，它是定义在类外部的普通函数，不属于任何类，但是需要在类内部声明，声明需要加。尽量使用初始化列表，因为不管你是否使用初始化列表，对于自定义类型成员变量，一定会先使用初始化列表。内部类是一个独立的类，它不属于外 部类，更不能通过外部类的对象去访问内部类的成员。，参见友元类的定义，内部类可以通过外部类的对象参数来访问外部类中 的所有成员。友元函数可以在类的任何地方声明，不受类访问限定符限制。Time 类的私有成员变量，但想在Time。静态成员也是类成员，受访问限定符的限定。]]></description><category></category></item><item><title><![CDATA[类与对象（中）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/139394594</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/139394594</guid><author>ff0823</author><pubDate>Thu, 06 Jun 2024 22:31:51 +0800</pubDate><description><![CDATA[5.如果类中没有定义构造函数，则c++编译器会自动生成一个无参数的默认构造函数，一旦用户定义编译器将不在生成。6.无参数和全缺省的构造函数都成为构造函数，并且默认构造函数只有一个。只是单个形参，该形参是对类类的对象的引用（一般用const修饰)，已存在的类类型对象创建新对象时由编译器自动调用。运算符重载是具有特殊函数名的函数，也是具有参数，返回值，参数列表，其返回值与其普通函数相似。，需要注意的是，构造函数·名称虽然是叫构造，但是构造函数的。，当const修饰成员函数，实际修饰成员函数。]]></description><category></category></item><item><title><![CDATA[类与对象（上）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/139375642</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/139375642</guid><author>ff0823</author><pubDate>Sun, 02 Jun 2024 16:32:08 +0800</pubDate><description><![CDATA[C语言是面对过程，关注的是过程，分析出求解问题的步骤，通过函数的屌用来逐步的解决问题。c++基于面向于对象的，关注的是对象，讲义几件事情拆分成不同的对象，靠对象之间相互完成。class为类的关键字，classname为类的名字。{}为类的主体，后面的分号不能省略。C语言的结构体中只能定义变量，在C++中，结构体中不只能定义变量还能定义函数。用类将对象属性与方法结合在一块，让对象更加完善，根据访问权限选择性将其接口提供个外部用户使用。2，protect和private修饰的成员不可以在类外直接的使用。]]></description><category></category></item><item><title><![CDATA[C++入门]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/139274649</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/139274649</guid><author>ff0823</author><pubDate>Fri, 31 May 2024 20:46:31 +0800</pubDate><description><![CDATA[（1）在这些变量，函数和类的名称将都存在全局作用域中，可能会导致许多的冲突。✿auto与指针和引用结合起来使用（用auto声明指针类型时，用auto和auto* 没任何区别，但用auto声明引用时类型时必须加&）（2）auto不再是一个储存类型的的指示符，而是作为一个新的类型指示符来指示编译器，auto声明的变量必须由编译器在编译时期推导而出的。在调用该函数时，如果没有指定实参则采用该形参的缺省值，否则指定实参。一个名门空间就定义了一个新的作用域，命名空间中的所有内容都局限于该命名空间中。]]></description><category></category></item><item><title><![CDATA[顺序表专题]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/137376701</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/137376701</guid><author>ff0823</author><pubDate>Thu, 04 Apr 2024 16:32:59 +0800</pubDate><description><![CDATA[数据结构是计算机储存，组织数据的方式。（数据结构是指相互之间存在一种或多种特定关系的数据元素集合）（2）需要数据结构的原因：最基础的数据结构能够提供的操作不能完全满足复杂的算法实现。静态顺序表和动态顺序表差不多，我展示复杂的动态顺序表（它只是没有动态内存申请）（2）储存数据能够方便查找。（1）能过储存数据（如：顺序表，链表）n个具有相同特性的数据元素的有限序列。空间少不够用，空间多了造成浪费。静态顺序表 和 动态顺序表。]]></description><category></category></item><item><title><![CDATA[预处理详解]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/137076159</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/137076159</guid><author>ff0823</author><pubDate>Wed, 27 Mar 2024 16:07:53 +0800</pubDate><description><![CDATA[当宏的参数在宏的定义中出现过一次的时候，如果参数带有副作用，那你在使用宏尚未时候就可能出现危险，导致不可测的危险。注意：参数列表的左括号必须与name紧邻，如果两者之间有任何的空白存在，参数的列表就会被解释为stuff的一部分。（1）宏参数和#define定义中可以出现其他#difine定义的符号，但是，对于宏来说，不能出现递归。（1）每次使用宏的时候，一份宏的定义代码插入到程序中，除非宏比较短，不然会大幅度增加程序。（2）当处理器搜索#define定义的符号的时候，字符串的常量并不会被搜索。]]></description><category></category></item><item><title><![CDATA[动态内存管理]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136906976</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136906976</guid><author>ff0823</author><pubDate>Thu, 21 Mar 2024 21:46:01 +0800</pubDate><description><![CDATA[（3）包含柔性数组成员的结构用malloc（）函数进行内存的动态分配，并且分配的内存应该大于结构的大小，以适应柔性数组的预期大小。（3）返回值的类型是void* ，所以malloc函数并不知道开辟空间的类型，具体使用的时候使用者自己来决定。（1）函数的功能：num个大小为size的元素开辟一块空间，并且把空间的每一个字节初始化为0。在队空间是另找一个合适的大小的连续空间来使用，这样函数返回的是一个新的内存地址。（2）如果参数prt指向的空间不是动态开辟的，那free函数的行为是未定义的。]]></description><category></category></item><item><title><![CDATA[联合体和枚举]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136873969</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136873969</guid><author>ff0823</author><pubDate>Thu, 21 Mar 2024 13:59:50 +0800</pubDate><description><![CDATA[其中这些可能的取值都是有值的，从零开始依次加一，在声明枚举类形式时可以赋值。（3）因此联合体变量大小，至少是最大成员的大小（因为联合体至少得有能力保存最大的那个成员）。（2）但最大成员的大小不是对齐数的整数倍的时候，就要对齐到最大对齐数的整数倍。（1）像结构体一样，联合体由一个或者多个成员构成，这些成员可以是不同类型。（4）枚举类型常量是遵循作用域规则的，枚举生命在函数内，只能在函数内使用。（2）编译器只为最大成分分配空间，联合体的特点是所有成员共用一块空间。（1）联合体至少是最大成员的大小。]]></description><category></category></item><item><title><![CDATA[自定义类型：结构体]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136768524</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136768524</guid><author>ff0823</author><pubDate>Tue, 19 Mar 2024 19:52:14 +0800</pubDate><description><![CDATA[所以不能对位段的成员使⽤&操作符，这样就不能使⽤scanf直接给位段的成员输⼊值，只能是先输⼊放在⼀个变量中，然后赋值给位段的成员。（4）如果嵌套了结构体的情况，嵌套的结构体成员对齐到自己的成员中的最大对齐数的整数倍，结构体的大小就是对齐数的最大整数倍（含有嵌套结构体的最大对齐数的整数倍）。（4）一个结构包含两个位段，第二个位段成员比较大，无法容纳在第一个位段剩余的位时，是舍弃还是利用，这是不确定的。（3）结构体总大小为最大的对齐数（结构体成员变量都有一个对齐数，所以对齐数的最大值）的整数值。]]></description><category></category></item><item><title><![CDATA[数据在内存中的储存]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136742629</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136742629</guid><author>ff0823</author><pubDate>Sat, 16 Mar 2024 19:46:44 +0800</pubDate><description><![CDATA[三种表示方法都有符号位和数值位，‘0’表示正，‘1’表示负。而数值为最高位为符号位，后面为数值位。是指数据的低位字节内容保存在内存的高地址处，而数据的高位字节内容，保存在内存的低地址处。是指数据的低位字节内容保存在内存的低地址处，而数据的高位字节内容，保存在内存的高地址处。整数的2进制表示方法有三种，原码，反码，补码。浮点数的表示范围：float.h中定义。原码：按照正常的方法翻译成二进制数字。反码：除了符号位其他位按位取反。1.整数存储存的四二进制的补码。正数的原，返，补都相同。储蓄的顺序是倒过来的。]]></description><category></category></item><item><title><![CDATA[C语言内存函数]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136740478</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136740478</guid><author>ff0823</author><pubDate>Fri, 15 Mar 2024 15:55:48 +0800</pubDate><description><![CDATA[1.函数memcpy从sourec的位置开始向后复制num个字节的数据到destination指向的呢存位置。3.如果destination和source有任何重叠，复制的结果都是未定义。1.memcpy禹memmove的差别就是处理的源内存块和目标内存块重叠。1.用来设置内存的，将内存中的值以字节为单位设置成你想要的内容。2.如果源空间与目标空间出现重叠，就得使用memmove。2.相比于strcmp这个函数可以选择比较几个字节的元素。1.返回值大于0，等于0，小于0；一，函数memcpy。]]></description><category></category></item><item><title><![CDATA[字符函数和字符串函数]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136678305</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136678305</guid><author>ff0823</author><pubDate>Wed, 13 Mar 2024 15:44:41 +0800</pubDate><description><![CDATA[3.strtok函数找到str中的下一个标记，并将其用\0结尾，返回一个指向这个标记的指针。(注：strtok函数会改变被操作的字符串，所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。4.strtok函数的第一个参数不为NULL，函数将找到str中第一个标记，strtok函数将保存它在字符串中的位置。5.strtok函数的第一个参数为NULL，函数将在同一个字符串中被保存的位置开始，查找下一个标记。C语言中专门有一系列的函数做字符分类，也即是一个字符属于什么类型的字符。]]></description><category></category></item><item><title><![CDATA[指针（5）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136570978</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136570978</guid><author>ff0823</author><pubDate>Fri, 08 Mar 2024 21:36:11 +0800</pubDate><description><![CDATA[（1）sizeof：不是函数为操作符，计算变量占内存空间的大小，单位是字节。如果操作数是类型的话，计算的是使用类型创建的变量所占内存空间的大小。（只在乎占用内存空间的大小，不在乎内存中存放什么数据）sizeof（数组名）（计算的是整个数组，单位是字节）。（2）strlen：是C语言库函数，功能求字符串长度。<string.h>（2）有两例外：&加数组名（取出的是整个数组）；（1）数组名是首元素地址。]]></description><category></category></item><item><title><![CDATA[深入了解指针（4）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136459700</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136459700</guid><author>ff0823</author><pubDate>Tue, 05 Mar 2024 12:45:11 +0800</pubDate><description><![CDATA[如果你把函数的指针(地址)作为参数传递给另一个函数，当这个指针被用来调用其所指向的函数时，被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用，而是在特定的事件或条件发生时由另外的一方调用的，用于对该事件或条件进行响应。回调函数就是一个通过函数指钻调用的函数。qsort用冒泡来实现。1.回调函数是什么？]]></description><category></category></item><item><title><![CDATA[指针（3）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/136049382</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/136049382</guid><author>ff0823</author><pubDate>Wed, 07 Feb 2024 12:30:01 +0800</pubDate><description><![CDATA[二维数组的概念：如果把一维数组作为数组的元素，这时候就是二维数组，二维数组作为数组元素被称为三维数组，二位以上被称为三维数组。二维数组的首元素地址是第一行的地址，第一行的地址是一维数组的地址，类型是数组指针类型。（将void （*）（int）简化为 void (*pf_t)(int)）(将int （*) [5]简化为int（*ptr_t）[5])浮点型指针： float * 指向浮点型的指针。字符指针：char * 指向字符的指针。整形指针：int * 指向整型的指针。数组指针： 指向数组的指针。]]></description><category></category></item><item><title><![CDATA[详细指针（2）]]></title><link>https://blog.youkuaiyun.com/ff0823/article/details/135999986</link><guid>https://blog.youkuaiyun.com/ff0823/article/details/135999986</guid><author>ff0823</author><pubDate>Fri, 02 Feb 2024 23:57:53 +0800</pubDate><description><![CDATA[注：（1）数组传参的本质是传递了数组首元素的地址，所以形参访问的数组和实参访问的数组是同一个数组。这里的数组名表示整个数组，取出的是整个数组的地址。（整个数组的地址与首元素的地址是有区别的）是数组名是首元素的地址并且数组在传参时候，形参可以写成数组的形式，但是本质还是指针，因此在。（1）数组就是数组，是一块连续的空间。（2）形参的数组时不会单独再创造数组空间，所以形参的数组是可以忽略数组的大小。这里表示整个数组，计算的是整个数组的大小，单位是字节。数组的数组名，是首元素的地址。（4）可用指针来访问数组。]]></description><category></category></item></channel></rss>