c++技术
文章平均质量分 68
luckyone906
这个作者很懒,什么都没留下…
展开
-
C++和C#在内存处理上的比较
C#与C++内存管理的比较(【出处】http://blog.csdn.net/hardwayboy/article/details/4499242)1、总述C#最大的一个改进其实就是对内存访问与管理方法的改进。在.NET中内存的管理是全权委托给垃圾回收器,由垃圾回收器来决定何时该释放内存空间。现在普遍采用两种技术来释放程序动态申请的系统内存:首先是以C++为代表的必须以手工方式使应用程序代码完成这些工作,让对象维护引用计数。然后是以.NET以及Java使用的垃圾回收器来完成内存释放工作。在C++原创 2024-09-15 09:32:34 · 1066 阅读 · 0 评论 -
计算机控制系统之CPU组成及原理(内存寄存器)
而当除数是 16 位时,被除数一定是 32 位的,因为 AX 是 16 位寄存器,自然,放不下 32 位的被除数,所以,在这里还需要使用另一个 16 位寄存器 DX ,其中 DX 存放 32 位的被除数的高 16 位,而 AX 则存放 32 位的被除数的低 16 位,同时,AX 的作用还不仅仅是用来保存被除数的,当除法指令执行完成以后,当然,如果除数是 16 位的话,则 AX 中会保存本次除法操作的商,而 DX 则保存本次除法操作的余数。程序的开始过程和顺序流程是一样的,程序的顺序流程和开始过程相同。原创 2024-05-30 21:37:31 · 1814 阅读 · 0 评论 -
C语言预处理命令总结说明
后是指令关键字,在关键字和 # 号之间允许存在任意个数的空白字符,整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的,程序员在程序中用预处理命令来调用这些功能。条件编译允许只编译源程序中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销并提高了程序的效率。#elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码。#ifdef 如果宏已经定义,则编译下面代码。原创 2024-05-01 20:51:30 · 159 阅读 · 0 评论 -
C语言#include的用法详解(文件包含命令)详解
#include叫做文件包含命令,用来引入对应的头文件(.h文件)。#include 也是C语言预处理命令的一种。#include 的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。#include 的用法有两种,如下所示:#include <stdHeader.h>#include "myHeader.h"使用尖括号< >和双引号" "的区别在于头文件的搜索路径不同:使用尖括号< &原创 2024-05-01 20:50:32 · 2703 阅读 · 0 评论 -
C语言各种预处理命令详解
但是现在有个问题,程序中要实现的某个功能在 VS 和 GCC 下使用的函数不同(假设 VS 下使用 a(),GCC 下使用 b()),VS 下的函数在 GCC 下不能编译通过,GCC 下的函数在 VS 下也不能编译通过,怎么办呢?不同的平台下必须调用不同的函数,并引入不同的头文件,否则就会导致编译错误,因为 Windows 平台下没有 sleep() 函数,也没有 <unistd.h> 头文件,反之亦然。你看,在不同的平台下,编译之前(预处理之后)的源代码都是不一样的。这种以#号开头的命令称为预处理命令。原创 2024-05-01 20:48:38 · 329 阅读 · 0 评论 -
C语言指针是什么?彻底理解C语言指针的概念
当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据。需要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址。( )表示取值操作,整个表达式的意思是,取出地址 0X1000 和 0X2000 上的值,将它们相加,把相加的结果赋值给地址为 0X3000 的内存。原创 2024-05-01 20:45:11 · 361 阅读 · 0 评论 -
C语言指针变量的定义和使用详解(精华)
上节我们说过,CPU 读写数据必须要知道数据在内存中的地址,普通变量和指针变量都是地址的助记符,虽然通过 *p 和 a 获取到的数据一样,但它们的运行过程稍有不同:a 只需要一次运算就能够取得数据,而 *p 要经过两次运算,多了一层“间接”。值得注意的是,p_a 需要的一个地址,a 前面必须要加取地址符&,否则是不对的。*&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。原创 2024-05-01 20:43:43 · 64 阅读 · 0 评论 -
C语言指针数组详解(数组每个元素都是指针)
parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。第二个 printf() 语句中,parr+i 表示第 i 个元素的地址,*(parr+i) 表示获取第 i 个元素的值(该元素是一个指针),**(parr+i) 表示获取第 i 个元素指向的数据。为了便于理解,可以将上面的字符串数组改成下面的形式,它们都是等价的。原创 2024-05-01 20:42:08 · 293 阅读 · 0 评论 -
C语言函数指针(指向函数的指针)详解示例演示
一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。参数列表中可以同时给出参数的类型和名称,也可以只给出参数的类型,省略参数的名称,这一点和函数原型非常类似。注意( )的优先级高于*,第一个括号不能省略,如果写作returnType *pointerName(param list);//返回两个数中较大的一个。原创 2024-05-01 20:40:54 · 284 阅读 · 0 评论 -
C语言指针的总结详解(1)
程序在运行过程中需要的是数据和指令的地址,变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符:在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址;5) 数组也是有类型的,数组名的本意是表示一组类型相同的数据。2) 给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数,例如int *p = 1000;p 可以指向 int 类型的数据,也可以指向类似 int arr[n] 的数组。定 义 含 义。原创 2024-05-01 20:39:15 · 152 阅读 · 0 评论 -
C++ 与Qt之间的关系概述
Qt 提供了 C++ 库:Qt 提供了许多 C++ 库,如 Qt Core、Qt GUI、Qt Widgets、Qt QML 等,这些库可以帮助开发者更快速地创建 GUI 和应用程序。C++ 和 Qt 之间有着密切的关系。Qt 可以使用 C++ 的特性:Qt 可以使用 C++ 的所有特性,包括类、对象、继承、多态等。Qt 是用 C++ 编写的:Qt 的核心部分是用 C++ 编写的,因此,如果你熟悉 C++,那么学习 Qt 会更容易。C++标准库,是指C++自带的,一套完整的,支持各种常用功能的类和函数库。原创 2024-04-27 11:05:37 · 625 阅读 · 0 评论 -
C++中用new和不使用new创建对象的区别实例详解
一般来说对于一个进程栈的大小远远小于堆的大小,在Window下,栈的大小是2MB,Linux下,默认栈空间大小为8MB。对于堆,比如32位系统最大不超过2G,而64位系统最大不超过4G,当需要分配一个非常大的内存时,请用new。栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。原创 2024-04-06 11:18:05 · 880 阅读 · 0 评论 -
C++ 与Qt之间的关系概念
Qt 提供了 C++ 库:Qt 提供了许多 C++ 库,如 Qt Core、Qt GUI、Qt Widgets、Qt QML 等,这些库可以帮助开发者更快速地创建 GUI 和应用程序。Qt 是一个用于开发 GUI 和应用程序的跨平台 C++ 库,它提供了许多功能和工具,可以帮助开发者创建高质量的桌面应用程序和移动应用程序。这意味着你可以使用 C++ 的语法和特性来编写 Qt 应用程序。Qt 是用 C++ 编写的:Qt 的核心部分是用 C++ 编写的,因此,如果你熟悉 C++,那么学习 Qt 会更容易。原创 2024-04-06 11:11:21 · 789 阅读 · 0 评论 -
QT或MFC中调用Opencv需要引用库时或自身的架构库时可以添加环境变量引用路径下文件的方式搭建环境避免可执行程序下文件过多显得臃肿
c++原创 2023-02-18 11:29:52 · 825 阅读 · 1 评论 -
c++ 中return返回值与内存的分配释放详解
c++原创 2023-01-11 22:16:16 · 4427 阅读 · 0 评论 -
c++中值类型数组和引用数组的区别
c++原创 2022-12-28 22:18:38 · 738 阅读 · 1 评论 -
C++中delete 和 delete []的真正区别
c++原创 2022-12-24 14:35:42 · 5407 阅读 · 1 评论 -
C++中构造函数什么时候会被调用(从本质上理解)
c++原创 2022-11-19 22:10:30 · 3546 阅读 · 4 评论 -
C++中HANDLE句柄的概念
c++原创 2022-11-10 18:30:40 · 2203 阅读 · 0 评论 -
c++TCP socket实时文件传输
c++原创 2022-11-07 18:40:17 · 3420 阅读 · 0 评论 -
C++中TCP socket传输文件
C++原创 2022-11-07 18:28:48 · 3276 阅读 · 0 评论 -
mfc-钩子的使用方法详解
MFC原创 2022-11-01 21:05:07 · 577 阅读 · 0 评论 -
mfc-钩子的使用方法详解
MFC原创 2022-11-01 21:03:27 · 363 阅读 · 0 评论 -
mfc中钩子的使用
MFC原创 2022-11-01 21:02:52 · 233 阅读 · 0 评论 -
MFC中手动添加消息处理函数PreTranslateMessage截获按键等消息
C++原创 2022-11-01 21:02:10 · 1693 阅读 · 0 评论 -
MFC中的模态对话框与非模态对话框的消息循环及消息传递问题(都可以通过SendMessage传递消息)
C++原创 2022-10-29 14:00:21 · 2339 阅读 · 0 评论 -
C++释放指针时提示Invalid address specified to RtlFreeHeap解决办法(堆栈中分配时多分配一些空间再释放)
c++原创 2022-10-15 16:59:21 · 2000 阅读 · 0 评论 -
c++中MFC消息机制,UI线程和工作线程,模式对话框原理
c++原创 2022-10-13 19:48:09 · 1746 阅读 · 0 评论 -
QT中使用C++ socket通信,socket通信原理三次握手和四次握手详解、客户端与服务端实例详解
网络原创 2022-09-28 21:21:42 · 3549 阅读 · 0 评论 -
UDP中connect()和send()函数详解
通讯原创 2022-09-20 19:50:59 · 2777 阅读 · 0 评论 -
C++中UDP通讯详解
C++原创 2022-09-20 19:39:51 · 16598 阅读 · 0 评论 -
qt C++中指针自动释放内存及程序中的内存操作、管理
c++原创 2022-11-12 09:16:45 · 4862 阅读 · 0 评论 -
C++位操作中按位置0、置1、取反操作
c++原创 2022-07-03 09:21:20 · 2864 阅读 · 1 评论 -
C++析构函数
格式:~类名(void){ }没有参数,没有返回值,不能被重载,一个类只能有一个析构函数对象销毁时自动执行主要负责清理对象生命周期中的动态资源#include <iostream>using namespace std;class A {public:A(int i = 0) {m_pi = new int(i);}void print(void)const {cout << *m_pi << endl;}~A(void) { //..原创 2022-05-19 19:44:07 · 431 阅读 · 0 评论 -
C++:delete和delete[]释放内存的区别
c++原创 2022-11-12 09:17:49 · 1475 阅读 · 0 评论 -
C++基本知识点
1.字符串的末尾''也算一个字符,一个字节。2.使用库函数strcpy(a,b)进行拷贝b->a操作,strcpy会从源地址一直往后拷贝,直到遇到''为止。所以拷贝的长度是不定的。如果一直没有遇到''导致越界访问非法内存,程序就崩了。3.strlen的结果未统计’’所占用的1个字节。4.写出完整的strcpy函数char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) &..原创 2022-05-19 19:41:41 · 840 阅读 · 0 评论 -
C++中对象的动态建立与释放详解
我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。=============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============复制代码代码如下:#include<iostream>using namespace std;int main(){int *p;//定义一个指向int型变量的指针pp=n..原创 2022-05-15 19:46:36 · 1950 阅读 · 0 评论 -
C++ 怎么取整形数组的长度
本文主要讨论两个小点,怎样获取主函数中整形数组的长度;自定义函数输入参数为整型数组,怎么得到该数组长度。【正文】很早就知道C++ 中,因为栈的回收机制,函数的返回值不可以是数组。但是,能不能输入参数包含数组呢?答案是肯定的,以指针形式传入即可。那么,问题再进一步,如果我想在函数中对数组进行遍历,可不可以呢?答案还是肯定的。函数中接收数组的是一个数组指针,也就是把数组的函数名传进去,数组的地址被函数接受,那我们怎么知道数组的长度呢?答案还是肯定的,我们可以用strlen函数啊。但原创 2022-05-15 19:44:27 · 3204 阅读 · 0 评论 -
C++中对象创建与释放
创建对象有以下四种形式:#include <iostream> using namespace std; class A{ private: int i; public: A(){ cout<<"调用没有参数的构造函数"<<endl; } A(int a):i(a){ cout<<"调用有一个参数的构造函数"<<endl; } ~A(){cout<<"成员变量为:"<<i<<"原创 2022-05-15 19:41:22 · 3792 阅读 · 0 评论 -
C++中malloc与new方法动态创建数组并释放
#include<iostream>using namespace std;int main(){//动态创建释放一维数组(new)int *a;//基地址int n=10;//数组大小a=new int[n];//创建 delete[] a;//释放//动态创建释放二维数组(new)int **b;int m=10;n=10;b=new int*[m];for(int i=0;i<m;i++)b[i]=new int[n];for(i=0;i<m;..原创 2022-11-10 21:05:24 · 690 阅读 · 0 评论