![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
c++编程
猪猪侠吃面包
这个作者很懒,什么都没留下…
展开
-
条件编译
定义编辑#define x //定义一个宏...#endif//C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。#ifndef x //先测试x是否被宏定义过#define x程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1#else程序段2 //如果x已转载 2016-07-26 13:31:04 · 576 阅读 · 0 评论 -
memcpy函数语法 用法 例子
该例子说明几个问题 1. mem开头的函数基本上都是对内存操作的, 它们不管内存里放的是什么数据,只要给出长度,它们就操作。 不像strcpy、strcmp等函数一定以'\0'结尾,而且是字符。 mem可以操作可见字符、不可见字符、控制字符等,任意数据都可以。 2. memcpy是内存复制函数 原型: void *转载 2016-08-02 11:01:57 · 831 阅读 · 3 评论 -
typedef
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:转载 2016-08-01 18:29:43 · 200 阅读 · 0 评论 -
socket()
socket()函数用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源。如果协议protocol未指定(等于0),则使用缺省的连接方式。对于使用一给定地址族的某一特定套接口,只支持一种协议。但地址族可设为AF_UNSPEC(未指定),这样的话协议参数就要指定了。协议号特定于进行通讯的“通讯域”。中文名socket()作 用分配一转载 2016-08-10 10:09:21 · 311 阅读 · 0 评论 -
typedef
typedef int * pint ; #define PINT int * 那么: const pint p ;//p不可更改,但p指向的内容可更改 const PINT p ;//p可更改,但是p指向的内容不可更改。 #define 是宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。#def转载 2016-08-01 18:31:40 · 220 阅读 · 0 评论 -
队列和栈
1、栈的概念栈又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。2、栈的顺序存储结构和操作实现栈的顺序存储结构示意图:下面通过一个实例展示栈的顺序存储结构的操作实现,其中包含了6种操作:[cpp] view plain copy #include #include转载 2016-08-15 18:29:37 · 406 阅读 · 0 评论 -
const的常见用法
const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量 下面我就介绍一下几种常见的用法1.用于定义常量变量,这样这个变量在后面就不可以再被修改 const int Val = 10; //Val = 20; //错误,不可被修改 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这转载 2016-08-15 11:35:02 · 165 阅读 · 0 评论 -
break,continue,return的区别
break,continue,return的区别最近总使用到这3个关键字,所以想总结一下他的用法. 1)break 直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试。他只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来跳出. 2)continue 也是终止当前的循环过程,但转载 2016-08-19 09:59:35 · 246 阅读 · 0 评论 -
#ifdef 和 #if defined 的区别
#ifdef 和 #if defined 的区别在于,后者可以组成复杂的预编译条件,比如#if defined (AAA) && defined (BBB)xxxxxxxxx#endif#if defined (AAA) || VERSION > 12xxxxxxxxx#endif而#ifdef 就不能用上面的用法,也就是说,当你要判断单个宏是否定义时#转载 2016-07-26 13:36:29 · 962 阅读 · 0 评论 -
关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2016-08-15 11:35:59 · 152 阅读 · 0 评论 -
extern “C"和#ifdef __cplusplus
在c的头文件中经常看到这样的形式。#ifdef c__plusplus extern "c"{#endif ...#ifdef c__plusplus }#endif这个.h文件被cpp文件include后,它告诉了cpp的编译器,被extern c 括起来的部分是c函数,在编译时,保持c风格的函数转载 2016-08-08 18:46:08 · 300 阅读 · 0 评论 -
C++封装、继承、多态(虚函数、虚指针、虚表)
C++封装继承多态总结面向对象的三个基本特征面向对象的三个基本特征是:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!封装转载 2016-08-23 20:38:42 · 896 阅读 · 0 评论 -
C++多态的实现及原理详细解析
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始转载 2016-08-23 20:51:32 · 273 阅读 · 0 评论 -
变量的定义和声明
我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别转载 2016-08-17 19:57:09 · 258 阅读 · 0 评论 -
c,c++里面,头文件里面的ifndef /define/endif的作用
今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方:例如:要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 ············转载 2016-08-11 14:08:09 · 320 阅读 · 0 评论 -
关于socket的整理
对于socket的编程,一直希望能够写一个很好用的封装好了的类。但是,却发现因需求的改变,导致总是封装好的socket无法下次再使用。近几天,又折腾了下socket,故将想到的整理如下。 该文主要是针对一些资料的整理(个人没那个能力封装好比他们更好的类)。而且到现在为止,也没完全整理出一个比较有实用性的资源。该文主要涉及如下: (转载 2016-08-19 16:39:57 · 715 阅读 · 0 评论 -
C++ Virtual函数
虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};void Move();pri转载 2016-08-23 20:18:02 · 375 阅读 · 0 评论 -
C++命名空间 namespace的作用和使用解析
一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在转载 2016-08-23 18:52:47 · 1943 阅读 · 0 评论 -
C++之多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体。也可以这样说就是实现了“一个接口,多种方法”。 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性。前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载。后者则是通过动态联编来实现的,在C转载 2016-08-23 20:26:48 · 252 阅读 · 0 评论 -
01 strcpy()、memset()函数详解
strcpy():strcpy(dest,src); strcpy把src所指向以'\0'结尾的字符串复制到dest所指的数组中,返回指向dest的指针。 当sizeof(dest)>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0'; 当sizeof(dest)<sizeof(src)时,拷贝出错。这个循环会一直执行,直到循环条件为...转载 2018-10-29 14:21:23 · 563 阅读 · 1 评论 -
指针基础
1.语言中变量的实质要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧!先来理解理解内存空间吧!请看下图:内存地址→ 6 7 8 9 10 11 12 13------------------------------------------------------转载 2016-08-11 11:19:24 · 296 阅读 · 0 评论 -
IP地址转换为unsigned long(函数inet_addr和inet_aton)
inet_addr 将"数字+句点"的格式的IP地址转换到unsigned long中,返回值已经是按照网络字节顺序的相反inet_ntoa把类型为struct in_addr的数据转化为"数字+句点"的形式的字符串typedef u_int32_t in_addr_t;struct in_addr{ in_addr_t s_addr;};本机字节顺序与网络转载 2016-08-10 19:38:10 · 2341 阅读 · 0 评论 -
ioctlsocket()
ioctlsocket() 简述: 控制套接口的模式。 #include int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp); s:一个标识套接口的描述字。 cmd:对套接口s的操作命令。 argp:指向cmd命令所带参数的指针。 注释: 本函数可用于任一状态的任一套转载 2016-08-11 13:53:21 · 770 阅读 · 0 评论 -
数组和指针的区别
在大一刚开始学习C的我们也许并没有真正的理解数组与指针,其实C的精华部分便是指针与内存的分配这一块。那是充其量我们能够知道数组与指针肯定不是完全等价的,相同点就是:对数组的引用总是转化为对指针的引用,而不同点呢就是数组名是常量而指针是变量仅此而已,随着我们资历不断的提升,我们么更加进一步的去理解它,从他的本质去即内存的分配与访问去理解它。 好了,首先呢我们必须明白转载 2016-08-11 11:22:06 · 256 阅读 · 0 评论 -
二维数组和指针
二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按行存储的,即先存储第一行的元素,再存储第二行的元素。当把每一行看作一个整体,即作为一个大的数组元素时,原来的二维数组也就变成一个一维数组了。而每个大数组元素对应原来二维数组中的一行,称为行数组元素,显然每个行数组元素转载 2016-08-11 11:25:08 · 274 阅读 · 0 评论 -
指向结构体的指针
在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子:typedef struct{ char name[21]; char city[21]; char state[3];} Rec;typedef Rec *RecPointer;RecPointer r;r=(RecPointer)malloc(sizeof(Rec转载 2016-08-11 11:17:52 · 504 阅读 · 0 评论 -
NULL和0
null在C中用(void*)0表示,即空指针,表示该指针不指向任何内存单元,0表示指向地址为0的单元(这个单元一般是不能使用的)。指针和指针变量有时候表示同一个意思的,看具体的语境。在C++中用0表示。’\0‘表示字符串结束,在ASCII中的值为0(数值0,非字符‘0’)。printf("%d",'0');===>48printf("%c",'0');==转载 2016-08-11 13:33:34 · 208 阅读 · 0 评论 -
molloc()和free()
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助!转载 2016-08-11 12:42:30 · 1531 阅读 · 1 评论 -
va_list原理及用法
VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。下面是va_list的用法示例 :#include int AveInt(int,...); void main(){ printf(转载 2016-08-10 19:35:39 · 1139 阅读 · 0 评论 -
va_list(),va_start() ,va_end()
(一)写一个简单的可变参数的C函数 下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的 C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );转载 2016-08-10 19:06:52 · 300 阅读 · 0 评论 -
socket编程结构体变量
sockaddr结构体sockaddr的缺陷:sa_data把目标地址和端口信息混在一起了struct sockaddr { unsigned short sa_family; char sa_data[14]; }; sa_family是通信类型,最常用的值是 "AF_INET"sa_data转载 2016-08-11 13:50:36 · 666 阅读 · 0 评论 -
send,recv,sendto,recvfrom
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;转载 2016-08-11 13:29:52 · 199 阅读 · 0 评论 -
malloc()函数详解
malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。下面具体介绍一下malloc函数,,希望帮助大家了解。一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 ma转载 2016-08-11 13:01:37 · 289 阅读 · 0 评论 -
数组指针和指针数组
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4转载 2016-08-11 11:21:00 · 182 阅读 · 0 评论 -
_vsnprintf 用法
可以和va_start va_end结合使用,实现对参数的合并_vsnprintf,C语言库函数之一,属于可变参数。用于像字符串中打印数据、数据格式用户自定义。函数简介头文件: #include 函数声明: int _vsnprintf(char *buffer, size_t max_count, const c转载 2016-08-10 19:18:29 · 465 阅读 · 0 评论 -
巧用可变参数宏、编译器内置宏和printf输出调试信息
前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:转载 2016-08-11 13:48:49 · 261 阅读 · 0 评论 -
memcpy函数用法
原型:extern void *memcpy(void *dest, void *src, unsigned int count);用法:#include 功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。举例: // memcpy.转载 2016-08-11 14:05:38 · 265 阅读 · 0 评论 -
C06_C语言-变量作用域
[cpp] view plain copy print?#include /*全局变量: 作 用 域:当前文件中从定义的这一行,到文件结尾可用 生命周期:程序启动到程序退出*/ int w; //全局变量有默认初始值,int类型默认初始值为0 void changeW(){ w = 8;转载 2016-08-11 17:30:31 · 291 阅读 · 0 评论 -
总结几种log打印printf函数的宏定义
[c-sharp] viewplaincopy#include #define lU_DEBUG_PREFIX "##########" #define LU_DEBUG_CMD 0x01 #define LU_DEBUG_DATA 0x02 #define LU_DEBUG_ERROR 0x04 #defi转载 2016-08-11 13:57:07 · 1634 阅读 · 0 评论 -
数组
在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧。1 一个var[i][j]引用形式的可能声明 当你看见像var[i][j]这样的二维数组引用形式时,你能知道他是怎么被声明的吗?答案是否定的,指针和数组使用的部分通用性会让你无法判断这样的一种形式的声明转载 2016-08-12 09:48:15 · 156 阅读 · 0 评论