
C/C++
NeverWA
哈啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
展开
-
C++运算符重载的三个为什么
C++运算符重载的三个为什么1. 为什么有四个操作符不宜重载为友元函数?2. 为什么流操作符必须重载为友元函数?3. 为什么有五个操作符不能重载?C++运算符重载的三个为什么1. 为什么有四个操作符不宜重载为友元函数? 四个不能宜载为友元函数的运算符为:=、()、[]、->我在网上搜了许多博客,很多人都说是: 当把赋值运算符重载为类的友员...原创 2018-08-16 11:04:25 · 1171 阅读 · 0 评论 -
C++关键字之static
C++关键字之static静态成员静态成员的提出是为了解决数据共享的问题。实现数据共享有许多种方法,其中使用全局性的变量或对象是一种方法。但是全局性会带来一个问题: 不安全性——全局量在程序任何地方都可以更新而不加限定,无法控制范围。静态成员包含静态数据成员和静态成员函数static的作用C++中的static的作用基本与C中static中一致。唯一的区别是C++中多了一...原创 2018-06-13 15:01:49 · 12761 阅读 · 0 评论 -
Core Dump
Core Dump事后调试 当一个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常叫core,这叫做Core Dump。进程异常终止通常是因为有Bug,比如非法访问内存导致段错误,事后可以用gdb调试器检查core文件以查清错误原因,这叫做事后调试。一个进程允许产生多大的core文件取决于进程的Resource Limit。 系统默认不允许产生core文件的,是...原创 2018-06-13 11:41:57 · 13364 阅读 · 0 评论 -
C++之友元
C++之友元友元分为友元函数和友元类友元函数友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不 属于任何类,但需要在类的内部声明,声明时需要加friend关键字class Date{friend void PrintDate(const Date& d);public: Date(int year, int month, int day...原创 2018-06-13 10:48:51 · 12708 阅读 · 0 评论 -
C++操作符重载
C++操作符重载重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。操作符重载也是一个函数,具有返回值和形参表。它的形参数目与操作符的操作数目相同,使用运算符重载可以提高代码的可读性返回值 重载操作符的特点: 1. 定义某种重载时定义方式与定义普通函数基本一致,唯一的区别就是在“操作符名”前加上关键字“operator”. 2. 虽然定义时...原创 2018-06-13 10:31:35 · 12734 阅读 · 0 评论 -
C语言几种特殊的自定义类型
C语言几种特殊的自定义类型结构体结构体的创建可以在创建结构体的时候添加结构体的标签tag,用来为该结构体取唯一的名字,以便于和其它结构体区分开。struct tag{ member_list;} variable_list;也可以在创建结构体的时候不加标签,声明为一个匿名结构体。如:struct{char name[20];//名字int a...原创 2018-03-29 14:15:56 · 13433 阅读 · 0 评论 -
gcc 链接文件
gcc 链接文件生成静态库gcc -c add.c minus.c ar rcv libtest1.a add.o minus.o链接静态库方法一: gcc -o test test.c libtest1.a方法二: gcc -o test test.c -L. -ltest1生成动态库gcc -c add.c minus.c gcc -shared...原创 2018-04-15 12:03:06 · 14511 阅读 · 0 评论 -
makefile
makefile对多文件构成的大中型软件项目进行编译、调试的工具工作机制有5个源文件 main.c function1.h function1.c function2.h function2.cmain.c#include "function1.h"#include "function2.h" int main(int argc, char **argv){...原创 2018-04-15 12:01:54 · 12678 阅读 · 0 评论 -
指针深度理解
深度理解指针指针指针是什么? 就一句话,指针就是地址。指针里面存的是地址而不是像int、char等里面存的是具体的值,而对指针里的地址解引用之后才可以得到具体的值指针数组int *p1[10];操作符“[]”的优先级比“*”高,所以p1先和“[]”结合,形成数组,之后这个数组再和“*”结合,形成指针数组。换句话说,在上述定义里面,p1是一个数组,只不过这个数组有点特...原创 2018-03-22 11:34:29 · 12839 阅读 · 0 评论 -
C语言写日历
用C语言写一个日历#include<stdio.h>/*1970-1-1 星期四*/// 以1970-1-1作为基准int start_year = 1970;int start_month = 1;int start_day = 1;//将以char输进来的字符串转换成int型,并完成错误检查和信息筛选int char_to_int(char *s, ...原创 2018-03-22 11:33:30 · 13829 阅读 · 0 评论 -
C语言之柔性数组
C语言之柔性数组什么是柔性数组?C99 中,结构体中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。 说白了,柔性数组是数组。只不过这是一种特殊的数组——先给出数组大小,然后再根据给出的大小定义柔性数组的大小(用多大就开多大)。定义柔性数组定义柔性数组存在于结构体的内部,并不像C++那样直接在数组里填一个变量。柔性数组的定义必须借助结构体实现,例如:...原创 2018-03-30 21:04:59 · 12894 阅读 · 0 评论 -
复习C语言随笔 十四
main函数参数1.使用main函数的参数,实现一个整数计算器 要求: 程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:命令行参数输入:test.exe -a 1 2 执行1+2输出3 #include<stdio.h>#include<...原创 2018-03-21 09:25:13 · 12670 阅读 · 0 评论 -
3.17之模拟实现字符串函数
字符串函数模拟实现1. 实现strcpy#include<stdio.h>#include<string.h>#include<assert.h>char *my_strcpy(char *des, const char *source){ char *p = des; const char *q = source; ...原创 2018-03-21 09:24:33 · 12663 阅读 · 0 评论 -
2018.3.17
2018.3.171. 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。#include<stdio.h>int main(){ int result[10] = {0}; int a[18] = {0}; int n; int i; int max = 0; printf("...原创 2018-03-21 09:24:07 · 12622 阅读 · 0 评论 -
C++关键字之const
C++关键字之constC中的constC中const修饰只读变量,编译器在编译期间不知道其存储的内容。通常不为普通 const 只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作。要想修改const修饰的变量的值, 可用volatile修饰。因为: 用volatile修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、...原创 2018-06-15 20:16:22 · 12653 阅读 · 0 评论 -
C++默认的6个成员函数
C++默认的6个成员函数何为默认?若programmer不定义或调用,则编译器会自动定义或调用它默认的方法。1. 构造函数用来初始化对象的成员变量。 特点: 1. 函数名与类名相同 2. 没有返回值 3. 新对象被创建时,由编译器自动调用,且在对象的生命周期内仅调用 一次 4. 构造函数可以重载,实参决定了调用哪个构造函数 5. 无参构造函数和全缺省的构造函数都认为是...原创 2018-06-15 20:33:42 · 12992 阅读 · 0 评论 -
C++关键字之inline
C++关键字之inline什么是inline?一般在调用函数时会产生该函数的栈帧结构,在栈帧结构中保存关于该函数的参数、变量等临时数据;另外还要保存现场,函数返回后还要恢复现场。这些都要花费一些时间。如果有的函数需要频繁使用,则在反复调用的过程中会有很大的时间开销,降低程序运行效率。C++提供了一种提高效率的方法,即在编译时将所调用的函数的代码直接嵌入到主调函数中,而不是将流程...原创 2018-06-15 21:39:43 · 12666 阅读 · 0 评论 -
C++之lambda
C++之lambda什么是lambda表达式?lambda表达式语法捕捉列表?参数列表?lambda表达式的作用C++之lambda什么是lambda表达式?一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个匿名的内联函数。lambda表达式跟普通函数相比不需要定义函数名,取而代之的多了一对方括号[]。lambda表达式...原创 2018-08-12 18:58:55 · 1138 阅读 · 0 评论 -
C++之类型萃取
C++之类型萃取在C++中想要获得某个变量的类型有两种方式: 一种是利用typeid。 ypeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。 用法:typeid().name()#include <iostream>using namespace std;class Bas...原创 2018-07-13 16:41:07 · 3282 阅读 · 0 评论 -
C++之类模板特化
C++之类模板特化模板:template<typename T1, typename T2>class example{public: example(); ~example();private: T1 data1; T2 data2; int data3;};template<typename T1, typena...原创 2018-07-13 15:47:11 · 5835 阅读 · 0 评论 -
C++之智能指针
C++之智能指针auto_ptrunique_ptrshared_ptrweek_ptrC++之智能指针智能指针的核心思想:资源分配即初始化:定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放C++标准库里主要有四种指针:auto_ptr、unique_ptr(scope_ptr)、s...原创 2018-07-16 18:00:17 · 1669 阅读 · 0 评论 -
C++之继承
C++之继承1 公有继承2 私有继承3 保护继承4 派生类的构造函数与析构函数4.1 派生类的构造函数4.2 派生类构造函数的特殊形式4.3 派生类的析构函数5 多重继承5.1 多重继承的二义性问题C++之继承一个新类从已有类那里获得其已有特性,这种现象称为继承。新类叫做派生类或子类,原来的已有类叫做基类或父类。值得注意的是派生类和基类永远是相...原创 2018-06-27 10:08:14 · 10070 阅读 · 0 评论 -
C++之访问属性
C++之访问属性public属性为public的成员,不仅该可以在该成员所属类的内部进行访问,而且可以在类外通过类的对象来访问。private属性为private的成员,只能在该成员所属类的内部进行访问,而不能在类外通过类的对象来访问。换句话说,对外不可见。protected属性为protected的成员,只能在该类所属的类的内部和其类的派生类中进行访问。...原创 2018-06-26 16:31:14 · 11828 阅读 · 0 评论 -
C++关键字之virtual
C++关键字之virtual1. 虚基类在C++之继承的多重继承引起的二义性问题中讲到,解决二义性问题的另一个方法就是用关键字virtual。具体做法就是虚基类。1.1 声明虚基类虚基类的声明并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。声明时只需在派生类指定继承方式前面加上关键字virtual即可。class A{int a};clas...原创 2018-07-01 14:55:01 · 10106 阅读 · 0 评论 -
C++之内存管理
C++之内存管理C中的内存管理malloccallocrealloc上述三种方式是用户在堆上开辟空间的办法,用完后必须用free释放,否则会造成内存泄露。 值得一提的是实际开辟的内存比申请的空间大:前面多申请32个字节,后面多申请4个字节。具体原因这里就不再阐述,详情见C语言动态分配内存C++中的内存管理C语言内存管理方式在C++中可以继续使用,同时C...原创 2018-06-19 10:37:20 · 12889 阅读 · 0 评论 -
C语言动态分配内存
C语言动态分配内存malloc动态开辟内存的函数:void* malloc (size_t size);这个函数向内存申请⼀块连续可⽤的空间,并返回指向这块空间的指针 如果开辟成功,则返回⼀个指向开辟好空间的指针 如果开辟失败,则返回⼀个NULL指针,因此malloc的返回值⼀定要做检查 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在...原创 2018-06-18 15:45:24 · 13397 阅读 · 0 评论 -
C++获得程序运行时间
C++获得程序运行时间目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间,但是各种计时函数的精度不一样.下面对各种计时函数,做些简单记录.方法1,time()获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CU...转载 2018-06-17 20:52:11 · 17146 阅读 · 2 评论 -
C++之函数重载
C++之函数重载重载的引入使得C++的灵活性有了极大提升,重载体现在只要在定义函数时形参列表(形参个数、类型、顺序你)不同,就可以重复定义同名函数。值得注意的是,函数的重载这里并对函数的返回值做出要求,那么也就意味着c++中函数的重载不关心返回值,即若定义了两个函数名、形参列表相同,返回值不同,那么编译器也会认为这两个函数其实是一个函数,在编译期间就会报错。事实上,C++编译器在编译时还是...原创 2018-06-17 19:31:30 · 12873 阅读 · 0 评论 -
C++之右值引用
C++之右值引用c++11中的新概念,主要解决了移动语义和完美转发我们平常使用的引用都是指左值引用。 下面是一个测试例子void func ( int&amp;amp;amp; i ) { std::cout &amp;amp;lt;&amp;amp;lt; &amp;quot;func(int&amp;amp;amp; i) = &amp;quot; &amp;amp;转载 2018-06-17 18:02:15 · 13007 阅读 · 0 评论 -
3.14之可变参数
可变参数心得例子使用可变参数,实现函数,求函数参数的平均值。#include<stdio.h>#include <stdarg.h>int my_average(int n, ...){ va_list arg; int result = 0; int i = 0; va_start(arg, n); w...原创 2018-03-21 09:23:47 · 12653 阅读 · 0 评论 -
3.14之递归
递归练习1. 递归和非递归分别实现求第n个斐波那契数。递归#include<stdio.h>int fib(int n){ if(n < 3) return 1; return fib(n-1) + fib(n-2);}int main(){ int n = 0; printf("Please input a n...原创 2018-03-21 09:23:27 · 13181 阅读 · 0 评论 -
复习C语言随笔 六
1 define 与 const 与 typedef 与 enum1 define 不是一个关键字,用于宏定义。#define M 3 //宏常量int i=M; //预编译期间进行宏替换,分配内存int j=M; //再次进行宏替换,又一次分配内存! 这里的 #define 宏常量在预编译阶段进行简单替换,本身没有类型。2 ...原创 2018-03-19 17:01:01 · 12507 阅读 · 0 评论 -
复习C语言随笔 五
复习C语言随笔 五几个需要注意的操作符1 移位操作符1 左移操作符 << 高位丢弃,低位补02 右移运算符 >> 2.1 算术移位 低位丢弃,高位补符号2.2 逻辑移位 低位丢弃,高位补0在实际中到时使用算数移位还是逻辑移位取决于编辑器|Note: C语言中没有涉及位移量为负数的情况2 位操作符1 按位与 &am...原创 2018-03-19 17:00:41 · 12338 阅读 · 0 评论 -
12.20
1. 写一个函数返回参数二进制中 1 的个数1.1 方法一:#include<stdio.h>int count_one_bits(unsigned int value){ int count=0; while(value) { value = value&(value-1); count++; ...原创 2018-03-19 17:00:13 · 12304 阅读 · 0 评论 -
12.15
1.#include<stdio.h>#include<time.h>#include<stdlib.h>int main(){ int a; int b; int c=1; int count=0; srand(time(NULL)); printf("*************游戏开始******...原创 2018-03-19 16:59:53 · 12283 阅读 · 0 评论 -
复习C语言随笔 四
复习C语言随笔 四1. 传参#include<stdio.h>int jisuandaxiao(int a[]){ return sizeof(a)/sizeof(a[0]);}int main(){ int a[6] = {0,1,2,3,4,5}; printf("%d", jisuandaxiao(a)); return ...原创 2018-03-19 16:59:18 · 12477 阅读 · 0 评论 -
复习C语言随笔 三
复习C语言 三getchar()失效实例:#include<stdio.h> int main(){ char arr[10] = {0}; char ch; printf("请输入密码\n"); scanf("%s",arr); printf("请确认/N\n"); ch...原创 2018-03-19 16:58:34 · 12489 阅读 · 0 评论 -
C语言之回调函数
C语言之回调函数回调函数就是一个通过函数指针调用的函数。 在c语言中,有一个叫做qsort函数,就是利用了函调函数完成了对任意类型数据的快速排序。 今天,我写了一个对任意类型进行插入排序的函数: insert_sort()/*对buf 指向的数据(包含num 项,每项的大小为size)进行快速排序。如果函数compare 的第一个参数小于第二个参数,返回负值;如果等于返回零值...原创 2018-03-22 16:15:09 · 13110 阅读 · 0 评论 -
12.13
1#include<stdio.h>#define n 13int main(){ int i, j, k; for(i=0; i<n; i++) { if(i<=n/2) { for(j=0; j<n/2-i; j++) printf(" "); for(j=0; j<(2*i)+1; j+原创 2018-03-18 08:31:04 · 12518 阅读 · 0 评论 -
复习C语言随笔 二
复习C语言随笔 二使用异或交换两数a = 5; b = 10;a = a^b;b = a^b;a = a^b;辗转相除法while(a%b!=0){ int temp = a%b; a = b; b = temp;}悬空else int a = 0; int b = 1; if(a ==2) ...原创 2018-03-18 08:25:22 · 12461 阅读 · 0 评论