
c/c++
文章平均质量分 63
xiangjai
这个作者很懒,什么都没留下…
展开
-
C++笔记--strcpy, strncpy, memcpy(16)
目录strcpy:strncpy:memcpy:strcpy: 最常用的字符串拷贝函数,但是要注意这个函数不会自己判断源字符串是否比目标空间大,必须要程序员自己检查,否则很容易造成拷贝越界,下面是几个例子:char *a = "0123456789", *b = "abcdefghijk"; char c[5];输出: strcpy(c,a)=0123456789//数组c只有5个字节的空间,但是经过strcpy后a的剩余字符也拷贝过去了,如果c后面是...原创 2021-09-15 16:07:05 · 282 阅读 · 1 评论 -
C++笔记--Linux网络编程(15-0)-socket(供自查,文档说明)
传智播客C++学院网络基础协议的概念什么是协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A、B之间形成了一个最简单的数据传输规则。双方都按此规则发送、接收数据。A、B之间原创 2021-08-10 21:10:13 · 630 阅读 · 0 评论 -
原创 C++笔记--Linux网络编程(15)-socket
TCP/IP与socket通过进程间通信可以实现同一台计算机上不同的进程之间通信通过网络编程可以实现在网络中的各个计算机之间的通信进程能够使用socket实现和其他进程或者其他计算机通信同样的socket既可以实现进程间通信,也可以实现计算机之间通信socket是通信端点的抽象。 与文件描述符一样,socket需要使用socket描述符socket在Linux上也是通过文件实现的,所以传统...原创 2021-08-09 21:45:50 · 371 阅读 · 0 评论 -
C++笔记--Linux编程(14)-线程同步
线程同步技术说明线程共享进程的内存空间,打开的文件描述符,全局变量。当有多个线程同时访问一块内存空间或者一个变量、一个文件描述符,如果不加控制,那么可能会出现意想不到的结果。互斥互斥(mutex)是相互排斥的意思,它是一种锁或者信号灯。互斥用来保护多个线程共享的数据和结构不会被同时修改,一个互斥锁只能有两个状态 locked---加锁unloc...原创 2021-08-08 15:10:58 · 164 阅读 · 0 评论 -
C++笔记--Linux编程(13)-守护进程-线程
进程组概念和特性每个进程都属于一个进程组,在waitpid函数和kill函数的参数中都曾使用到。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长继承)。所有,组长进程表示,其进程组ID==其进程ID 可以使用kill-SIGKILL-进程组ID来将整个进程组内的进程全部杀死 组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程村庄,进程组就存在,与...原创 2021-08-07 22:03:22 · 863 阅读 · 0 评论 -
C++笔记--Linux编程(12)-信号
Linux编程(12)-信号原创 2021-08-07 21:20:07 · 81 阅读 · 0 评论 -
C++笔记--Linux编程(11)-进程通信
无名管道无名管道无名管道是半双工的,就是对于一个管道来讲,只能读,或者写。无名管道只能在相关的、有共同祖先的进程间使用。一个fork或者exec调用创建的子进程继承了父进程的文件描述符。打开和关闭管道int pipe(int filedes[2]);在你从一个管道中读出或者写入数据,这个管道必须存在。如果成功建立了管道,则会打开两个文件描述符,并把它们的值保存在一个整数数组中。第一个文件描述符用于读取数据,第二个文件描述符...原创 2021-08-03 21:45:52 · 326 阅读 · 0 评论 -
C++笔记--Linux编程(10)-进程控制 fork系统调用
Linux进程模型传统的Linux模型里有三种创建或者修改进程的操作 1.system用于调用shell,执行一个指定的命令; 2. fork用于创建一个新的进程,该进程几乎是当前进程的一个完全拷贝; 3. exec可以在进程中用另外的程序来替换当前运行的进程什么是进程进程是一个正在执行的程序实例,他也是Linux基本的调度单位,一个进程由如下元素组成进程的当前上下文(context),它是进程当前执行状...原创 2021-08-01 20:28:19 · 619 阅读 · 0 评论 -
C++笔记--Linux编程(9)-linux文件和输入输出 文件和目录操作
Linux文件概念Linux系统上的文件部分类型说明普通文件。就是储存到磁盘上大家所操作的各种数据文件;管道文件。是一个从一端发送数据,从另一端接收数据的通道;目录也叫目录文件,是包含了保存在目录中文件的列表;设备文件是一种特殊文件,提供了大多数物理设备的接口;符号链接包含了到另一个人文件的连接,类似于windows的快捷方式;套接口套接口更像管道文件,但可以让...原创 2021-07-31 13:23:24 · 549 阅读 · 0 评论 -
C++笔记--Linux编程(8)-gcc gbb make
gcc使用gcc,程序员可以对编译过程有更多的控制,编译过程分为3个阶段。-预处理-汇编-链接程序员可以再编译的任何阶段结束后停止整个编译过程以检查编译器在该阶段输出的信息示例#include <stdio.h>int main(int arg, char *args[]){ if (arg < 3) printf("请输入2个参数\n"); else { int a = atoi(args[1]); int b = atoi(args[原创 2021-07-31 11:15:42 · 166 阅读 · 0 评论 -
C++笔记--STL编程(7)
Vectorvector是一个模板类。。在使用模板类的时候,需要指明具体的类型例如vector<int> v1(5); //相当于 int v1[5];示例#include "vector"using namespace std;int main() { vector<int> arr(5); arr.push_back(1); for(int i=0; i<arr.size(); i++) { cou.原创 2021-07-25 09:28:04 · 123 阅读 · 1 评论 -
Clion(CMake工具)中创建父子项目,引入第三方库的方法
环境C/C++ Clion Mac创建父/外层项目创建外层项目,选择C++Executable,命名20210717创建子项目/库项目创建目录,命名hello_libhello_lib目录下创建hello_dll.h hello_dll.cpp CMakeLists.txt文件hello_lib.h#ifndef INC_20210717_HELLO_DLL_H#define INC_20210717_HELLO_DLL_Hint add(int ...原创 2021-07-17 19:08:08 · 3118 阅读 · 1 评论 -
C++笔记--char *字符串和char []字符串的理解
STL入门与使用原创 2021-07-16 20:52:00 · 361 阅读 · 0 评论 -
C++笔记--面向对象(OOP)编程基础--函数模板、类模板(6)
函数模板、类模板原创 2021-07-16 20:50:54 · 316 阅读 · 0 评论 -
C++笔记--面向对象(OOP)编程基础--类的继承及多态(5)
类的继承及多态原创 2021-07-16 20:46:46 · 123 阅读 · 0 评论 -
C++笔记--面向对象(OOP)编程基础--操作符重载及友元(4)
操作符重载及友元原创 2021-07-16 20:44:32 · 124 阅读 · 0 评论 -
C++笔记--面向对象(OOP)编程基础(new/delete、类的静态成员、C++编译器对象管理模型分析)(3-2)
面向对象(OOP)编程基础(new/delete、类的静态成员、c++编译器对象管理模型分析)原创 2021-07-13 21:05:50 · 211 阅读 · 0 评论 -
C++笔记-面向对象(OOP)编程基础(概念、类中的封装;类的构造和析构)--赋值构造函数四种应用场景 深copy和浅copy 类的三种构造函数的调用规则研究(3-1)
赋值构造函数三种应用场景类定义class Student { private: int a; public: Student(); Student(int a); Student(const Student &student); ~Student();};类实现#include "Student.h"#include "iostream"using namespac原创 2021-07-11 21:18:44 · 160 阅读 · 0 评论 -
C++笔记--关于string, char*, char[]中的‘\0’问题(2-3)
const char* 字符串 以 “\0”结尾 char[] 字符串 以 “\0”结尾 string 字符串 不以 “\0”结尾 char[n] = "string", 当string 长度+“\0”>n时,会因空间不足出错 string.c_str() 转 const char* 时, 会在字符串末尾 自动补“\0” char* 转string 时, 会自动把末尾的 “\0” 去掉 strlen()是取字符串除去结尾符 “\0” 的长度 sizeof()是包含‘\0’的长度 带有‘原创 2021-07-10 21:18:56 · 3619 阅读 · 0 评论 -
C++笔记--读写配置文件(2-2)
读写配置文件头文件// cfg_op.h#ifndef _INC_CFG_OP_H#define _INC_CFG_OP_H#ifdef __cplusplusextern "C" {#endifint GetCfgItem(char *pFileName /*in*/, char *pKey /*in*/, char * pValue/*in out*/, int * pValueLen /*out*/);//int WriteCfgItem(char *pFileName.原创 2021-07-09 20:31:16 · 337 阅读 · 0 评论 -
C++笔记--内联函数 类的封装 构造函数(2-1)
1内联函数1)内联函数在编译时直接将函数体插入函数调用的地方2)inline只是一种请求,编译器不一定允许这种请求3)内联函数省去了普通函数调用时压栈,跳转和返回的开销2类的封装1 基本概念//类是把属性和方法封装。。。//类的内部//类的外部//我们抽象了一个类,用类去定义对象//类是一个数据类型,类是抽象的//对象是一个具体的变量。。占用内存空间。//类做函数参数的时候,类封装了属性和方法,在被调用函数里面, 不但可以使用属性,而且可以使用方法(成员...原创 2021-07-01 21:43:23 · 154 阅读 · 1 评论 -
C++笔记--引用(1-5)
1 引用(普通引用)0 变量名回顾变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)程序中通过变量来申请并命名内存空间通过变量的名字可以使用存储空间1 引用是C++的概念,属于C++编译器对C的扩展2 引用概念在C++中新增加了引用的概念 引用可以看作一个已定义变量的别名 引用的语法:Type& name = var; 引用做函数参数那?(引用作为函数参数声明时不进行初始化)int main(){ int a = 10; int &b原创 2021-06-27 18:17:28 · 173 阅读 · 1 评论 -
C++笔记--const(1-4)
1 const基础知识(用法、含义、好处)int main(){const int a;int const b;const int *c;int * const d;const int * const e ;return 0;}Int func1(const )初级理解:const是定义常量==》const意味着只读含义://第一个第二个意思一样 代表一个常整形数//第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)//第四.转载 2021-06-27 13:09:48 · 139 阅读 · 0 评论 -
C++笔记--bool类型(1-3)
C++中的布尔类型C++在C语言的基本类型系统之上增加了boolC++中的bool可取的值只有true和false理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示bool类型只有true(非0)和false(0)两个值C++编译器会在赋值时将非0值转换为true,0值转换为falseint main(int argc, char *ar原创 2021-06-27 09:28:40 · 373 阅读 · 0 评论 -
C++笔记--语法增强(1-2)
1实用性”增强//C语言中的变量都必须在作用域开始的位置定义!!//C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义int main(){ int i = 0; printf("ddd"); int k; system("pause"); return 0;}2register关键字增强//register关键字 请求编译器让变量a直接放在寄存器里面,速度快//在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容/*..原创 2021-06-27 08:51:03 · 117 阅读 · 0 评论 -
C++笔记--namespace概念(1-1)
1 namespace概念所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。一 :<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和原创 2021-06-27 08:14:59 · 118 阅读 · 0 评论 -
C/C++中字符指针和字符数组
char* s1="hello";char s2[]="world"; 第一个是字符串常量,是只读的, 不可以修改。第二个是字符数组,每个字符都有一个独立的地址。 char* test(){char ch[5]="hi";//gcc 会警告:返回局部变量。return ch;}这个函数是错误的,因为字符数组ch是局部变量,当test调用结束是占用的空间将被转载 2014-06-09 10:11:41 · 920 阅读 · 0 评论 -
C 杂谈之 指针与数组 (一)
思维导图 介绍 1> 指针定义:指针是保存变量地址的变量。 2> 本文重点 >> 指针与数组之间的关系 >> 操纵指针的规则 3> 指针优点 >> 表达某个计算的唯一途径 >> 代码更高效,更紧凑转载 2014-06-09 17:04:42 · 784 阅读 · 0 评论 -
C 杂谈之 指针与数组 (二)
思维导图 介绍 前接上文C 杂谈之 指针与数组 (一),接续往下谈指针和数组。 指针与数组 ——承接上文进行扩展你知道X = Y,在编译运行过程中,是什么样吗? 字符指针与函数 1> 字符串是一个以'\0'结尾的字符数组。看一个例子:printf接受的是转载 2014-06-09 17:18:29 · 616 阅读 · 0 评论 -
c/C++内存分配
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(s原创 2014-06-09 10:46:49 · 755 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2014-01-07 11:13:22 · 823 阅读 · 0 评论 -
C指针
第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让 我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr;转载 2014-01-07 11:05:09 · 710 阅读 · 0 评论 -
typedef的用法
一.基本概念剖析int* (*a[5])(int, char*); //#1 void (*b[10]) (void (*)()); //#2 double(*)() (*pa)[9]; //#31.C语言中函数声明和数组声明。函数声明一般是这样:int fun(int, double);对应函数指针(pointer to func转载 2014-01-07 11:06:52 · 641 阅读 · 0 评论 -
C语言学习
第一天学习1、C语言基本类型在32 位的系统上short 咔出来的内存大小是2 个byte;int 咔出来的内存大小是4 个byte;long 咔出来的内存大小是4 个byte;float 咔出来的内存大小是4 个byte;double 咔出来的内存大小是8 个byte;char 咔出来的内存大小是1 个byte。(注意这里指一般情况,可能不同的平台还会有所不同原创 2013-03-24 20:16:45 · 716 阅读 · 0 评论 -
浅谈C/C++中的typedef和#define
浅谈C/C++中的typedef和#define 在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地转载 2013-03-24 21:19:20 · 728 阅读 · 0 评论 -
C/C++中new/delete malloc/free
首先free对应的是malloc;delete对应的是new;free用来释放malloc出来动态内存,erdelete用来释放new出来的动态内存空间。应用的区别为:1. 数组的时候int *p=(int*)malloc(10*sizeof(int)) 释放的时候 free(p)即可;这是因为编译器对malloc做了一些特殊的处理,以保证可以正确释放内存。而当in原创 2014-06-13 09:25:14 · 868 阅读 · 0 评论 -
一道面试题(静态变量,虚函数,构造/析构函数调用顺序等)
#include "stdafx.h"#include using namespace std;static int x = 1; class A{public: A() { x = 4; cout<<"A constructor!"<<endl; } virtual ~A()原创 2014-06-13 10:47:00 · 1606 阅读 · 0 评论 -
字符串指针与字符数组的区别
用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。2. 对字符串指针方式char *ps="C Language";转载 2015-12-28 17:15:25 · 695 阅读 · 0 评论 -
经典C++笔试题目--100(编程练习(比C要难)(91-100))
编程练习(比C要难)(91-100)91、请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数。 【参考答案】unsigned int TestAsOne0(char log) { int i; unsigned int num=0, val; for(i=0;原创 2016-08-25 16:09:46 · 25424 阅读 · 3 评论 -
经典C++笔试题目--100(程序阅读题(62-90))
程序阅读题(62-90)62、main 函数执行以前,还会执行什么代码?【参考答案】全局对象的构造函数会在main 函数之前执行。63、 There are two int variables: a and b, don’t use “if”, “? :”, “switch”or other judgement statements, find out原创 2016-08-25 15:27:58 · 12066 阅读 · 1 评论