自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 【C++】char *p=“abc“ 与 char p[]=“abc“

char p[] = “abc”;char p[] = “abc”;把常量区的字符串值取出来放到寄存器,再由把寄存器中的值拷贝到栈内空间p数组作为局部变量被存储在栈区;"abc"不是常量,编译器把这个语句解析为 char str[4] = {‘a’,‘b’,‘c’,’\0’}; 如果char p[] = “abc”;写在函数内部,那么这里的"abc\0"因为不是常量,所以应该被放在栈上。char *p = “abc”;在这个声明中,"abc"被存储在静态数据区(全局).rodata, "abc"

2021-05-08 20:51:39 773

原创 【C++】多态性与虚函数

非虚函数 同名隐藏虚函数 同名覆盖静态 没有this 不能查表友元 没有thisinline 编译时调用点展开代码,虚函数是运行时获得调用情况构造函数用于置虚表指针析构函数可以 重置虚表指针虚表在只读数据区只能把子对象给父指针,不能把父对象给子指针(是一个)...

2021-03-15 20:49:54 270 2

原创 【C++】extern

extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。extern “C”1.目的:为了能够正确实现C++代码调用其他C语言代码,会指示编译器extern "C"修饰的变量和函数是按照C语言方式进行编译和链接的2.原理:作为一种面向对象的语言,C++支持函数重载,而过程式语言 C 则不支持。函数被 C++编译后在符号库中的名字与 C 语言的不同。因为C++编译后在符号库中的名字与函数名、函数参数数量及类型信

2021-03-13 15:08:15 115

原创 【Linux】C库函数与系统调用的区别

一、系统调用1)系统调用可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息。程序中调用了 printf() 函数,而库函数 printf 本质上是调用了系统调用 write() 函数,实现了终端信息的打印功能。2)系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。二、库函数1)库函数可以理解为是对系统调用的一层封装。可以当成应用程序设计人员与系统调用程序之间的一个中间层

2021-03-13 11:11:49 424

原创 【C语言】获取文件的大小

fseek()函数: 原型:intfseek(FILE *stream, long offset, int fromwhere); 参数:  stream: 第一个参数stream为文件指针 offset : 第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移 fromwhere: 第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET SEEK_SET: 文件开头 SEEK_CUR: 当前位置 SEEK_

2021-03-13 09:39:45 80

原创 【C++】移动构造 移动赋值

6个缺省函数构造 析构 拷贝 赋值 取地址——对普通对象取地址 对常对象取地址C11标准 delete删掉取地址的缺省函数 在运行时就不能取地址了移动构造 移动赋值Return s 通过移动构造来构建临时对象,临时对象指针指向hello,fun()函数销毁,将亡值调动移动赋值,s是str别名,释放s2指向的空间删除移动构造 移动赋值为s1 s2分配空间,fun()开辟栈帧,s的str指向堆区hello\0,return s调动构造函数构建临时对象,临时对象的str也指向堆区空间hell

2021-02-23 16:53:05 635

原创 【C++】引用

右值:常量、将亡值(函数中返回的值)int a=10; // 这个10就是右值,不能取地址。int &&c=10; //右值引用,可以去引用10int&&x=a; //a不能引用,因为a是左值,不能拿右值引用左值:有名字的变量 (能取地址就是左值) 调用fun()变成随机值引用返回,返回的a的地址,引用的失效的空间Fun()对空间进一步初始化。覆盖了10...

2021-02-23 15:29:11 80

原创 【C++】new/delete(系统怎么知道op是指向的是一个对象还是一组对象?)

调用第二个对象的Print方法系统怎么知道op是指向的是一个对象还是一组对象?new Object[10] 系统知道连续开辟了10个对象,开辟10个Object空间,实际上new还多开辟了4个字节的空间,在上面多开辟4个空间,先记录开辟空间的个数(10)。delete[]op删除的时候,它告诉其删除的是一组对象(10),[]告诉其上移4个字节来读取这里面的值(10),调用10次析构函数。如用delete op; 删除连续的多个空间,会导致错误。此语句只删除1个对象,而且在开辟空间的时候,有上越界

2021-02-23 11:23:03 106

原创 【C++】赋值兼容规则,拷贝构造函数、赋值语句在继承时的关系

公有继承 是一个切片情况崩溃 乱码赋值兼容规则在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不能反过来做。派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类

2021-02-23 11:14:39 312

原创 【C++】顺序容器

1.当数据量过大时,vector比list的寻找速度要好得多?vector数组:1.数组元素挨着,没有浪费空间,而list链表有next,prev,还有头部信息等等,存储密度小2.从操作系统上看,每个节点从堆区申请,随机的,堆区空间以4k为一页进行管理,vector的页与页之间是连续的,寻址容易,只有找下一页时可能缺页中断,缺页情况少;但是链表的话,这个结点是在这个页中存储的,但是它的next的可能在其他页,查询会产生缺页中断。2.list存储小元素(char、short、int等)的存储密度低如下

2021-02-23 09:59:43 75

原创 【C++】static修饰成员

静态成员1.int num = 0;class Object{private: int value;public: Object(int x = 0): value(x) { cout << "construct obj num: " << ++num << endl; } ~Object() { cout << "destruct obj num: " << --num << endl; }};i

2021-02-23 09:52:49 103

原创 【C++】友元函数

友元函数特点:单方向不具有传递性不具有继承特性1.(外部)函数友元注意:主函数也是外部函数Windows支持多线程,线程是调度单位,进程是资源单位Linux有两种调度单位,进程、线程class Int{private: int value;public: Int(int x=0):value(x){} ~Int(){} friend void fun(Int& it); friend int main();};void fun(Int& it){

2021-02-23 09:32:51 270 1

原创 【C语言】结构体

1.struct Student{ char name[20]; int age;}; int main(){ struct Student b={"bb",20}; struct Student c; //随机值 struct Student d={"dd"}; 0,初始化一部分则剩余部分为0 return 0;}c随机值d.age=0 因为初始化一部分则剩余部分为02..必须用字符串函数,不能直接复制3.4.typedef int *Pin

2021-02-23 09:02:44 73

原创 【C++】OOP思想和封装特性

C++三大特性:封装 继承 多态封装:属性和行为实现保护起来,通过公共的接口来操作属性通过访问限定符来实现访问限定符(1)public(公有):任意访问(2)protected(保护):子类和本类类中(3)private(私有):本类类中...

2021-01-24 15:57:59 140 1

原创 【C++】C/C++的区别

1.输入输出C++标准库 std2.引用没有空引用定义时必须初始化使用指针需要断言 ,引用不需要(没有空引用),更安全3.incline函数(内联函数)4.函数重载函数原型名字粉碎5.new malloc空悬指针int main(){int *p=new int(10);*p=100;delete p;cout<<*p<<endl;*p=10;cout<<*p<<endl;return 0;}delete p只是把

2021-01-24 10:58:07 117

原创 【C++】编译链接运行原理

一、预编译.i处理 “#”(1)删除#define,并作文件替换(2)递归展开头文件(头文件里还可以嵌套)(3)处理预编译指令( 如#if #endif)(4)删除所有注释(5)添加行号和文件名标识(6)保留#pragma指令二、编译.s(1)词法分析(2)语法分析(一行表达式)(3)语义分析(结合上下文)(4)代码优化(5)生成汇编指令 (仍是低级语言)三、汇编.o翻译指令(把低级语言翻译成计算机语言)四、链接.exe(1)合并段和符号表(2)符号解析(3)

2020-08-18 09:54:53 114

原创 【Linux】关于cmake与make

当程序只有一个源文件时,可以用gcc命令编译。但如果源文件太多,一个一个编译时就会特别麻烦,于是就有了make工具,可以来批处理编译源文件。于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么

2020-08-16 09:52:15 1081

原创 【Linux】gcc——预编译 编译 汇编 链接

main.c ==>main要经历四步骤: 预编译 编译 汇编 链接一、预编译gcc -E main.c -o main.i处理 “#”(1)删除#define,并作文件替换(2)递归展开头文件(头文件里还可以嵌套)(3)处理预编译指令( 如#if #endif)(4)删除所有注释(5)添加行号和文件名标识(6)保留#pragma指令二、编译gcc -s main.c -o main.s(1)词法分析(2)语法分析(一行表达式)(3)语义分析(结合上下文)

2020-08-15 00:16:39 229

原创 【数据结构】不定长顺序表的初始化、插入、删除、清空、销毁

不定长顺序表的常见操作:初始化、插入、删除(与定长顺序表一致)、清空、销毁与定长顺序表不同的是插入可能由增加扩容操作。#define APPENDSIZE 10typedef int ElemType;typedef struct SeqList{ ElemType *data; //data指向堆区的存储空间 int length; //当前元素的个数 i...

2020-04-01 15:51:07 392

原创 【数据结构】定长顺序表的操作(初始化、删除插入(按位置插入、头插、尾插)、删除(按元素值删除、按位置删除)、清空

定长顺序表顺序表的常见操作:初始化、插入(按位置插入、头插、尾插)、删除(按元素值删除、按位置删除)、清空插入://判空static void DeterPointIsNull(pFixedSeqList list) { assert(list != NULL); if (list == NULL) { printf("list is NULL, Please check...

2020-04-01 11:04:41 558

原创 【C语言】数据类型转换

int main(){ unsigned int x; unsigned int y = 100; unsigned int z = 50; x = z - y; printf("%d,%u",x,x); return 0;}解答00000000|00000000|00000000|00110010 50进制00000000|00000000|00000000|...

2020-03-15 11:34:25 213

原创 判断当前平台是否为小端(联合体的应用)

//小端:低地址保存小数据#include<stdio.h>bool IsLittle(){ union { char a; short b; }ua; ua.b = 0x0001; return ua.a == 0x01;}int main(){ if(IsLittle())//PC是小端 { printf("小端\n"); } else...

2020-03-12 16:42:33 75

原创 【C语言】给一个任意一数字,1.求出它是几位数 2.按逆序数输出 3.分别输出每一位数字;

int Count(long longnt Count(long long n) //统计是几位数{ if(n==0) return 1; int tmp =0; while(n!=0) { tmp++; n/=10; } return tmp;}

2020-03-09 00:05:06 1203

原创 经典指针程序_互换两个数字

#include<stdio.h>void swap_1(int a,int b) //形参(局部变量,只能在本函数中使用) //error{ int tmp; tmp=a; a=b; b=tmp;}void swap_2(int *p,int *q)//error{ int *tmp; tmp=p; p=q; q=tmp;}void swap_3(...

2020-03-09 00:02:36 126

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除