
c++
ssr奥利奥
这个作者很懒,什么都没留下…
展开
-
Linux c++ socket编程 客户端 服务器
服务器#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <string.h>#include <stdlib.h>...原创 2019-12-03 16:56:10 · 493 阅读 · 0 评论 -
C语言中static全局变量与普通的全局变量区别
1. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制...转载 2019-11-11 13:35:51 · 586 阅读 · 0 评论 -
浅谈new/delete和malloc/free的用法与区别
new和malloc的区别a.属性 new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持c。b.参数 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。c.返回类型 new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行...原创 2019-11-11 13:28:52 · 242 阅读 · 0 评论 -
Linux系统编程—线程清理
有时候我们希望线程退出时能够自动的执行某些函数,为了能达到此目的,OS 提供了两个函数帮我们完成这个功能:void pthread_cleanup_push(void (*rtn)(void*), void *arg);void pthread_cleanup_pop(int execute);使用方法如果想要你的线程在退出时能够执行清理函数,你需要使用 pthread_clea...转载 2019-11-07 10:50:55 · 238 阅读 · 0 评论 -
sizeof和strlen的区别
1. sizeof是一个操作符,strlen是库函数。2. sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为'\0'的字符串作参数。3. 编译器在编译时就计算出了sizeof的结果。而strlen函数只能在运行时才能计算出来。并且sizeof计算出来的是数据类型占内存的大小,而strlen计算的是字符串的实际长度。4. 数组做sizeof的参数不退化,传递s...原创 2019-11-05 15:33:03 · 248 阅读 · 0 评论 -
数组指针和指针数组
数组指针(指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。指针数组(数组)定义 intp[n];[]优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的...原创 2019-11-05 15:32:04 · 97 阅读 · 0 评论 -
静态链接和动态链接的区别和优缺点
静态连接和动态链接的区别静态链接和动态链接两者最大的区别就在于链接的时机不一样,静态链接是在形成可执行程序前,而动态链接的进行则是在程序执行时,下面来详细介绍这两种链接方式。静态链接的优缺点静态链接的缺点很明显,一是浪费空间,因为每个可执行程序中对所有需要的目标文件都要有一份副本,所以如果多个程序对同一个目标文件都有依赖,如多个程序中都调用了printf()函数,则这多个程序中都含有p...转载 2019-11-05 14:44:10 · 5096 阅读 · 0 评论 -
预编译、编译、汇编、链接
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。过程图解如下:编...转载 2019-11-05 14:36:54 · 374 阅读 · 0 评论 -
C++ const修饰函数、函数参数、函数返回值
const修饰函数在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数。#include <iostream>using namespace std; class A{...转载 2019-11-05 14:18:56 · 141 阅读 · 0 评论 -
指针和引用的区别
首先,引用不可以为空,但指针可以为空。 其次,引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。 再次,引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。 最后,引用比指针更安全。...原创 2019-11-05 14:04:46 · 194 阅读 · 0 评论 -
构造函数为什么不可以是虚函数
虚表指针是由构造函数初始化的,如果构造函数是虚函数,就没有虚指针去指向虚表来获取构造函数的地址。这就成了一个先有鸡先有蛋的问题。原创 2019-11-05 11:34:11 · 185 阅读 · 0 评论 -
C++多态(静多态和动多态)
如今的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)的语言。 这些能力和弹性使C++成为一个无可匹敌的工具,但也可能引发使用者的某些迷惑,比如...转载 2019-11-05 10:58:03 · 207 阅读 · 0 评论 -
C++中默认构造函数和构造函数初始化列表
默认构造函数和构造函数(1) 构造函数:C++用于构建类的新对象时需要调用的函数,该函数无返回类型!(注意:是“无”! 不是空!(void))。(2) 默认构造函数:默认构造函数是在调用时不需要显示地传入实参的构造函数。一个类如果自己没有定义构造函数,则会有一个无参且函数体也是空的默认构造函数。只要程序员定义了构造函数,编译器就不会再提供默认构造函数了。定义默认构造函数有两种方式,一是定义...原创 2019-11-05 09:36:24 · 1361 阅读 · 0 评论 -
弗洛伊德(floyd)算法核心代码
for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j];Floyd优缺点分析优点:容易理解,可以算出任意两个节点之间的最短距离,代码编...原创 2019-10-31 14:38:01 · 618 阅读 · 0 评论 -
Linux socket编程 TCP&UDP 客户端&服务器
TCP server:#include <iostream>#include <cstring>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <stdlib...原创 2019-10-31 13:47:27 · 179 阅读 · 0 评论 -
C++ 自由存储区是否等价于堆?
转载自**melonstreet **:听风过境的专栏阅读目录“free store” VS “heap”问题的来源结论正文“free store” VS “heap”当我问你C++的内存布局时,你大概会回答:“在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。如果我接着问你自由存储区与堆有什么区别,你或许这样回答:“malloc...原创 2019-10-31 13:16:19 · 148 阅读 · 0 评论