
C/C++
文章平均质量分 80
C/C++知识总结
疯狂嘚程序猿
这个作者很懒,什么都没留下…
展开
-
c语言不同数据类型之间的运算(隐式转换、整型提升、强制类型转换、不同类型之间的运算)
一、整型提升 整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。上面的官方描述可以概括如下两点:1.一个表达式中用到了整型值,那么类型为char、short int活整型位域(这几者带符号或无符号均可)的变量,以及枚举类型的对象,都可以被放在这个整型变量的位置。2. 如果1)中的变量的原始类型值域可以被int表示,那么原值被转换为int;否则的话,转为uns...原创 2021-01-16 15:27:29 · 23989 阅读 · 3 评论 -
printf函数打印变量自增自减
直接上题,判断下面代码的运行结果:#include<stdio.h>int main(){ int i = 8; printf("%d,%d,%d\n",i,i++,-++i); return 0;}欢迎在评论区留言你的答案!printf函数的运行机制首先,这个题要了解printf函数的执行过程。任何一个函数在执行之前,都要进行参数的传递(无参函数当然就不需要了),而传参无非就是从左向右传或者从右像左传(一般来说从那边开始传对函数的运行结果并没有...原创 2020-11-02 19:43:22 · 1384 阅读 · 0 评论 -
long long int的格式输入与输出
当做到一道结构体问题时,输出一直错误,找不到原因。问题如下:typedef struct student{ float grade[3]; long long int number;}stu;int main(){ stu stu1; scanf("%d;%f,%f,%f", &(stu1.number), &(stu1.grade[0]), &(stu1.grade[1]), &(stu1.grade[2])); printf("The each s原创 2020-10-28 22:38:36 · 39470 阅读 · 1 评论 -
C语言switch中default的使用
分支语句是C语言中的重要组成部分,switch就是一种多分支语句。在使用switch中,我们经常会看到switch语句中的default,default表示当前面的case值都不是目标是是就执行default,同时大多数情况下,我们看到default都在最后位置进行判断,那么default只能放在最后位置吗?switch(){ case : break; case : break; ... default: br...原创 2021-01-20 20:13:33 · 21875 阅读 · 1 评论 -
C语言编程过程中与到的问题(不定时更新)
这篇博客主要记录了自己在编程过程中遇到一些问题,这些问题如果不仔细琢磨还是难以发现的。原创 2020-11-24 21:32:11 · 730 阅读 · 0 评论 -
Git提交代码问题---push代码报错“fatal:HttpRequestException encountered”解决方案
问题描述GitHub的Git工具一直使用都可以正常提交代码,这次提交代码在add和commit的时候都没有任何问题,当Push后会提示输入账号和密码,当正确输入账号和密码后还是不能成功,显示如下:解决方法输入下列命令再次使用push就可以正常使用了:提交成功...原创 2020-11-15 20:24:20 · 1419 阅读 · 0 评论 -
隐式函数声明警告---调用malloc函数但不包含头文件
一、什么是隐式函数声明二、隐式函数声明会带来什么问题三、malloc隐式函数声明的解决方法原创 2020-11-01 22:10:14 · 2380 阅读 · 0 评论 -
C语言这一张图就够了!!!
思维导图,原文件更详细,需要的私信我哦!!!原创 2021-06-12 19:22:43 · 280 阅读 · 0 评论 -
计算机中加减乘除的实现
在计算机中各种运算都是CPU来完成的,而CPU在算术运算上只能做加法和移位和取反运算,在逻辑上只有与、或、非、异或。那么计算机中的减法、乘法、除法又是如何运算的?1.加法数据在内存中以二进制补码的形式存储,CPU在进行加法运算时直接将两个操作数的二进制补码相加,在转换成原码即可。2.减法CPU做减法时,将减数取反,在与被减数相加得到结果。示例1:15-8 = 715-8 = 15 + (-8),也就是取减数的相反数进行相加。15的二进制补码:0000 0000 0000 0000 0原创 2020-11-25 18:10:21 · 8412 阅读 · 0 评论 -
链栈基本操作&括号匹配问题---c语言
一、链栈的定义和初始化二、入栈操作三、出栈操作四、读栈顶元素五、链栈解决括号匹配问题(链栈基本操作示例)原创 2020-11-02 20:42:01 · 1964 阅读 · 0 评论 -
C++ const对象与非const对象的相互调用、const成员函数与非const成员函数的相互调用
1)const对象可以调用非const成员函数吗?答:不能。const修饰的对象实则修饰的是该对象的this指针,并且const修饰的成员不能进行修改,如果使用const调用非const成员函数,可能会将const对象进行修改。2)非const对象可以调用const成员函数吗?答:可以,这里就是将一个可以修改的对象进行读取,是允许的。3)const成员函数内可以调用其它的非const成员函数吗?答:不允许,const成员函数调用非const成员函数,调用该const成员函数的原创 2021-02-06 19:46:10 · 5690 阅读 · 0 评论 -
C语言动态内存管理
C语言中提供了很多数据类型,有基本数据类型、指针类型、自定义类型和空类型。我们可以根据需要选择合适的数据类型使用,当需要较大空间时我们可以选择数组、结构体等类型。但这些并不能够满足编程需求,例如在不知道具体所需内存大小的情况下直接定义变量分配内存就有可能造成内存浪费。在C语言中,动态内存管理就可以很好的解决这一问题。使用动态内存管理函数,程序员可以根据需求随时向系统分配申请空间,当这块空间用完时在及时释放归还给系统。1.为什么存在动态内存分配当不知道需要多大内存或者需要动态申请内存空间时,可以使用动原创 2020-11-15 21:28:49 · 1181 阅读 · 0 评论 -
C++ ---list使用介绍+模拟实现
一、list介绍1、什么是list?数据的存储方式有顺序存储和链式存储。数组、顺序表、vector、string等都是顺序存储的,而list则是链式存储的,它的底层是使用双向带头循环链表实现的(由于list需要支持多种类型,因此也是用模板来实现的)。1)list源码中节点的定义struct __list_node { typedef void* void_pointer; void_pointer next; //指向后一个节点的指针 void_pointer prev; ...原创 2021-04-11 20:59:45 · 710 阅读 · 2 评论 -
C++ --- 日期类的实现
一、日期类介绍日期类是一个实现日期相关计算的类,其成员变量有:年(_year)、月(_month)、日(_day),成员函数包括日期的加、减、日期加天数等相关运算的接口。例如,下图是一个实现日期相关计算的计算器二、接口定义和重要接口实现思路1)接口的定义和功能描述// 获取某年某月的天数 int GetMonthDay(int year, int month); // 全缺省的构造函数 Date(int year = 1900, int month = 1...原创 2021-02-08 20:10:17 · 1406 阅读 · 0 评论 -
C++---string类的使用和模拟实现
目录一、string接口使用二、重要接口的实现和解释三、完成代码 + 测试用例一、深浅拷贝1.浅拷贝浅拷贝也称值拷贝。定义两个变量int a = 10;int b = 15; b = a就是一种浅拷贝,即将a的值给b。2.深拷贝对于指针类型的变量,使用浅拷贝:int* a = 10; int* b = 20; b = a这是a和b就会指向同一块内存空间,因为采用浅拷贝会将a的值拷贝给b,而a的值是int型变量的地址。深拷贝:int* a = 10;int* b =..原创 2021-03-27 23:00:47 · 511 阅读 · 1 评论 -
C语言文件操作
一、有关文件的概念一般我们所说的文件指的是磁盘上的文件,而程序设计中我们所说的文件主要包含两种:程序文件、数据文件。程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe)。数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。1.文件名:一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件名包含3部分:文件路径+文件名主干+文件后缀 例如: c:原创 2020-11-16 13:13:19 · 821 阅读 · 0 评论 -
c++---内存管理
目录一、从语言层面认识C/C++的内存分布二、C++中动态内存管理1.认识new和delete2.operator new和operator delete函数3.new和delete的实现原理三、C++动态内存管理和C语言动态内存管理的比较四、了解定位new表达式五、常见面试题一、从语言层面认识C/C++的内存分布二、C++中动态内存管理1.认识new和delete2.operator new和operator delete函数3.new和del...原创 2021-03-12 21:53:21 · 516 阅读 · 0 评论 -
C++ ---类和对象(上)
了解面向过程和面向对象:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 1.类的认识和定义C语言中我们通过结构体将变量进行封装,而结构体中只能定义变量不能定义函数。在C++中,结构体不仅可以定义变量也可以用来定义函数,而C++中更习惯将这样的结构体称为“类”,使用关键字class来进行定义,为了兼容C语言还保留了结构体的用法。类的定义class className{.原创 2021-02-04 19:51:06 · 806 阅读 · 0 评论 -
C++---继承
面向对象的三大特征:封装、继承、多态封装:将事务的属性和行为抽象成具体的数据和方法,使用类对数据和方法进行封装,通过权限访问限定符进行限定,使用者无序关注具体实现(隐藏性),只需通过对象调用类中接口。以类为单位进行管理,提高了代码的复用性和可读性。一、继承的概念和定义1、什么是继承?继承是面向对象的特征之一,是提高代码复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类称派生类原有的类称为基类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过原创 2021-04-29 23:11:52 · 1643 阅读 · 8 评论 -
C++ --- 类和对象(中)
一个类中,如果没有任何成员,称为空类。任何一个类中,都会包含6个默认的成员函数,即使是空类也会自动生成6个默认成员函数,如下为类中的6个默认成员函数:注意:默认成员函数如果不写编译器会自动生成,如果写了编译器就不在生成而是使用我们自己写的。1.构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。class Date{ //成员变量、成员方法 ...原创 2021-02-06 19:46:40 · 1080 阅读 · 1 评论 -
c语言与字符串相关的库函数的模拟实现
本节主要介绍关于字符串的一些库函数,重要库函数的实现,memmove函数和memcpy函数的辨析,内存重叠,从前往后复制和从后往前复制。原创 2020-11-08 21:59:40 · 1566 阅读 · 2 评论 -
C语言指针比较高级的用法及指针数组面试题详解
本篇博客主要讲解数字符指针、数组指针、函数指针的解优化冒泡排序算法、指针数组以及关于指针的一些常考面试题原创 2020-11-11 22:22:56 · 1082 阅读 · 0 评论 -
C++---哈希(Hash Table)
一、unordered系列关联式容器STL库中提供了使用红黑树封装的map和set的关联式容器,查询效率可以达到logN,为了提高查询效率在C++11中,STL又提供了四个unor原创 2021-06-11 14:43:13 · 2757 阅读 · 8 评论 -
C++11重点语法
1、列表初始化在C语言中对数组支持使用{}进行初始化,而在C++98对于vector这样的自定义类型不支持使用{}初始化,每次使用vector就必须先定义在使用for循环进行初始化,某些场景下是及其不方便的,在C++11中对很多自定义类型都支持使用{}进行初始化。1)对于内置类型和STL容器的列表初始化int main(){ //内置类型的列表初始化 int x1 = { 10 }; int x2{ 10 }; int x3 = { 2 + 5 }; int x4{ 2 + 5 }原创 2021-07-24 16:34:33 · 512 阅读 · 0 评论 -
C++ ---入门基础知识( 命名空间、函数重载、引用、缺省参数、内联函数)
1.C++中的关键字(了解)2.命名空间2.1 什么是命名空间在C++中,变量、函数、类都是大量存在的,这些变量、函数和类的名称都存在与全局作用域中,这样就会产生很多冲突。例如:在软件开发过程中,一个软件产品大多都是由多个开发人员协作完成的,这样就有可能不同的开发人员使用了相同的变量名、函数名以及类名等。为了解决这些问题,C++中引入了命名空间的概念。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。命名空间在C++程序中的使用:2.2 命名空间的定义和原创 2021-02-03 19:41:37 · 902 阅读 · 2 评论 -
深度剖析数据在内存中的存储----C语言
本次主要介绍C语言的基本数据类型、整形数据在内存中的存储、浮点数据在内存中的存储、判断大小端机、原码反码补码等问题原创 2020-11-09 22:49:06 · 914 阅读 · 0 评论 -
C语言程序的编译和链接
一、程序的翻译环境翻译环境:组成程序的每个源文件通过编译器编译成目标文件,所有的目标文件在由连接器捆绑在一起形成一个单一而完整的可执行程序。同时,链接器也会引入标准c函数库中任何被该程序所有到的函数,而且他可以搜索程序员个人的程序库将其需要的函数也链接到程序中。程序编译连接过程:程序的编译和和链接包括程序的预处理、编译、汇编和链接4个步骤,每个步骤都由其具体的任务。1.预处理预处理主要有展开头文件、宏替换、条件编译、去掉注释四个任务,经过这4个步骤最终生成一个' .i '文件(Linux环境原创 2020-11-18 21:22:08 · 1957 阅读 · 1 评论 -
C/C++中static的作用(修饰局部变量、修饰全局变量、修饰函数)
一、static修饰局部变量 局部变量的作用范围为定义该局部变量的代码块或函数范围内有效,局部变量的生命周期随着函数的调用而创建,并且随着函数调用结束而销毁。static修饰的局部变量的作用域并不会改变,只是生命周期会随着整个程序运行结束而结束。局部变量和静态局部变量的区别: 使用static修饰局部变量的方法:在局部变量前面加static关键字,例如:static int a; 经过static修饰的局部变量称为静态局部变量,未经static修饰的局部变量称为动...原创 2021-02-03 17:39:55 · 8384 阅读 · 2 评论 -
C语言自定义类型详讲---结构体、联合、枚举
本博客主要介绍结构体、枚举、联合、结构体内存对齐。原创 2020-11-13 23:44:02 · 812 阅读 · 0 评论 -
C++---类和对象下
一、再谈构造函数 1.初始化列表1)构造函数体对成员变量赋值创建对象时,编译器会自动调用构造函数,为对象的成员变量进行赋值。但是,通过在构造函数体中给成员变量赋值,不能称为类对象成员的初始化!初始化只能进行一次,而构造函数体中成员变量可以多次赋值。因此,要对成员变量初始化就要使用初始化列表。2)什么是初始化列表?初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括 号中的初始值或表达式。class Test{public: T原创 2021-03-11 23:22:25 · 1148 阅读 · 7 评论 -
C++---stack & queue & 适配器模式 & 优先级队列 & 仿函数
一、容器适配器1、什么是适配器?设计模式(Design pattern):设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 容器适配器:适配器是一种设计模式,该种模式是将一个类的接口转换成客户希望的另外一个接口。简单理解为一个类的底层实现调用了另一个类提供的接口。二原创 2021-04-17 17:28:06 · 778 阅读 · 0 评论 -
C++---模板进阶
目录一、非类型模板参数1、非类型模板参数的介绍2、非类型模板参数的使用二、模板的特化1、模板特化的概念2、函数模板的特化3、类模板的特化三、模板的分离编译1、什么是分离编译2、模板的分离编译四、模板的优点和缺点一、非类型模板参数1、非类型模板参数的介绍模板参数分为类类型模板参数和非类型模板参数。类类型模板参数:出现在模板参数中,跟在class或者typename后面的参数类型名称。 非类型模板参数:用一个常量作为类或者函数模板的一...原创 2021-04-24 21:24:14 · 2831 阅读 · 5 评论 -
C++11---智能指针
在使用C++编程时,要求使用malloc/new申请出来的空间必须使用free/delete进行释放,如果程序员没有对使用malloc/new申请的空间在使用free/delete进行释放,则可能会造成内存泄露问题。但是,在C++中有些情况下,即使成员进行了释放也可能存在一些安全隐患,例如下面的程序:void MergeSort(int* a, int n){ int* tmp = (int*)malloc(sizeof(int)*n); _MergeSort(a, 0, n - 1原创 2021-08-02 11:04:46 · 460 阅读 · 0 评论 -
c++---vector的使用和模拟实现
目录目录目录一、接口介绍二、实现三、测试用例四、迭代器失效一、接口介绍1、插入数据void push_back(const T& x) 在当前vector尾部插入x,如果容量不够扩大二倍。iterator insert(iterator pos, const T& x) 在POS位置插入元素x2、容量相关size_t capacity() 返回当前vector的容量(size+剩余容量)...原创 2021-04-03 22:01:52 · 550 阅读 · 0 评论 -
指针和数组---c语言
一 指针1.什么是指针?指针是一个用来存储地址的变量,指针有整型、字符型、浮点型......当然指针也可以是数组型、函数型(后续会讲到)。2.指针的大小指针的大小由程序决定,在32位程序中指针的大小为4个字节,在64位程序中指针的大小为8个字节。一定要注意,指针的大小取决于程序而不是系统更不是计算机!!!(程序的大小可以在编译器中进行设置)扩展:为什么是32/64位程序而不是其他?32位程序占4G内存,而4G=4*1024*1024*1024比特位。计算机系统为每一个字节分配一.原创 2020-10-14 21:17:54 · 673 阅读 · 0 评论 -
web前端基础--Java script
基础语法(一)什么是Java scriptJava script的组成和编写输出语句和注释常量和变量进制转换1.什么是Java scriptJava script简称JS,是一种跨平台的脚本语言。跨平台:即不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。脚本语言:脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控...原创 2020-05-03 15:01:03 · 1632 阅读 · 1 评论