char函数

文件io和标准io的联系

核能气质少年 提交于 2020-02-06 06:13:47
 linix对IO文件的操作分为不带缓存的IO操作(文件IO都是不带缓存IO)和带缓存的标准IO操作.   刚开始,要明确以下几点:    不带缓存,其实不是直接对磁盘文件进行读取操作 ,像read()和write()函数,它们都属于系统调用,只不过在用户层没有缓存,所以叫做无缓存IO,但对于内核来说,还是进行了缓存,只是用户层看不到罢了。 1.  linux的文件I/O是一种低级的I/O,由操作系统提供的基本IO服务。(底层)    而标准I/O是ANSIC建立的一种标准I/O模型,是一种标准函数包和stdio.h头文件中的定义,具有一定的可移植性。(标准库封装) 2.   标准I/O默认采用了缓冲机制,还创建了一个包含文件和缓冲区相关数据的数据结构。       文件I/O一般没有采用缓冲模式,需要自己创建缓冲区。 3.  所有I/O函数都是针对文件描述符的。当打开一个文件时,即返回一个文件描述符,然后该文件描述符就用于后续的I/O操作。    而对于标准I/O库,它们的操作则是围绕流进行的。当用标准I/O库打开或创建一个文件时,我们已使用一个流与一个文件相关联。 4.   标准的 C 库函数(标准io)建立在底层系统调用(文件io)之上 ,即 C 函数库文件访问函数的实现中使用了文件 I/O 系统调用。    标准的 C 库中的文件处理函数为了减少使用系统调用的次数,提高效率

特化与重载

◇◆丶佛笑我妖孽 提交于 2020-02-06 05:50:59
现在我们已经知道如何使一个泛型定义扩展成一些相关的类家族和函数家族。但是有些时候,我们需要同一个名字的函数的不同实现( 透明定义 ),为的是在不同情况下获得较高的性能,在这种情况下就不是简单的参数替换就能够解决的。 一、透明定义使用的技术 对于函数模板使用的透明定义的技术是: 函数模板的重载 对于类模板的使用透明定义的技术是: 类模板的特化(全局特化和局部特化) 二、重载函数模板 两个名称相同的模板可以同时存在,还可以对他们进行实例化。 template<typename T> int f(T) { retrun 1; } template<typename T> //重载版本 int f(T*) { return 2; } 如果我们用int*来替换第一个模板参数T,用int来替换第二个模板参数T,那么将会获得两个具有相同参数类型和返回类型的同名函数。 int main() { cout << f<int*>((int*)0) << endl; //这里回实例化出两个实体,根据实参(int*)选择接近的 cout << f<int>((int*)0) << endl; //这里会实例化出两个实体,根据实参(int*)选择接近的 } 注意:表达式0是一个整数,而不是一个null指针常量。只有在发生特定的隐式转型之后参会成为一个null的指针常量

C++ 模板与泛型编程

跟風遠走 提交于 2020-02-06 05:27:24
《C++ Primer 4th》读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码。泛型编程与面向对象编程一样,都依赖于某种形式的多态性。 面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异。 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。一个类或一个函数可以用来操纵多种类型的对象。 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。 模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。 函数模板 模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。 template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; if (v2 < v1) return 1; return 0; } 模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。类型形参跟在关键字 class 或 typename 之后定义.在函数模板形参表中,关键字 typename 和 class 具有相同含义,可以互换使用

对于char *s1 和 char s2[] 的认识

二次信任 提交于 2020-02-06 02:34:30
对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误。 char *s1 = "hello"; char s2[] = "hello"; 【区别所在】 char *s1 的s1,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。 char s2[]的s2 是数组对应着一块内存区域,其地址和容量在生命期里不会改变,只有数组的内容可以改变 【内存模型】 +-----+ +---+---+---+---+---+---+ s1: | *======> | h | e | l | l | o |\0 | +-----+ +---+---+---+---+---+---+ +---+---+---+---+---+---+ s2: | h | e | l | l | o |\0 | +---+---+---+---+---+---+ 场景一) char *s1 = "hello"; char s2[] = "hello"; s2=s1; //编译ERROR s1=s2; //OK 分析:s2其地址和容量在生命期里不能改变 场景二) char s2[] = "hello"; char *s1 = s2; //编译器做了隐式的转换 实际为&s2 或 char

面向对象程序设计寒假作业2

三世轮回 提交于 2020-02-05 22:49:21
这个作业属于哪个课程 2020面向对象程序设计 这个作业要求在哪里 面向对象程序设计寒假作业2 这个作业的目标 1.继续完成编程题 2.新建一个github仓库,并把作业推送到该仓库。 作业正文 如下 其他参考文献 在文中相关部分 一.实践题 新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。 请使用.gitignore文件忽略不要上传的文件。用法自行百度。 1.新建仓库并安装Git (我家的网这几天抽了风,信号时断时续时有时无,导致我作业做得很是痛苦,重点是我下的Git和github desktop一断网就下载失败要重头开始下载,然后这俩还下的贼慢,所以这个作业只有先放一放,等我下好了回补上的) 二.编程题(请使用C语言或者C++完成以下题目): 继续完成作业一的编程题。 优化架构,一般要求每个函数长度不超过15行。 优化规范,尤其是命名规范。 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。 示例脚本: gcc 1.cpp -o lang.exe 进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。 示例脚本: gcc 1.cpp test.cpp -o test.exe test

C语言寒假大作战04

流过昼夜 提交于 2020-02-05 21:38:00
2.1.1 C语言寒假大作战04 这个作业属于哪个课程| 2019级软件工程4班 (中南林业科技大学涉外学院) | 这个作业要求在哪里| C语言寒假大作战04 | ---|:--:| 这个作业的目标|学会函数的基本操作 形参实参的使用 尝试编写一个功能性强的程序| 参考资料|[c语言中%g是什么意思?]( https://zhidao.baidu.com/question/271899014.html ) C语言基础知识:C语言函数调用怎么返回两个值 | 2.2.2 设计思路和遇到的问题 我发现我写的代码无法调用变量中从函数中的返回的符号,从而计算出结果。 所以我用if语句通过判断变量中的符号来再来列出相对应计算符号式子来对结果分两次计算。 一开始我打算在三年级那块分两步进行,先算a与b,再算result-1和c,发现如果a/b,结果如果是无限小数会导致以下结果 也就是数据错误。 所以我想到了助教和吴佳柳同学的相似的方法,再用switch结构嵌套分两次类,然后一次性计算result,这样就可以避免数据错误。 (中间连续使用两次switch结构没有在case 结尾加上break,浪费了好多到多的时间,甚至还以为自己采用的新办法是错误的,真的太粗心了) 2.2.3 程序结果截图 2.2.4 程序代码 #include<stdio.h> #include<stdlib.h>

C++学习笔记3

妖精的绣舞 提交于 2020-02-05 19:09:32
三、类和对象 1、类的概念 类是具有共同性质的一类事物的统称, 而对象是根据抽象的概念实例化出来的一个实际对象 C 结构: 结构体成员是数据; C++中的类: 类的成员是 数据和函数(数据成员、成员函数) 成员的访问权限有: 1) 私有成员: private, 它只能被该结构中的其他成员访问 2) 保护成员: protected 不涉及到派生的时候与 private 一样, 后面会详细讲解 3) 公有成员: public, 即可以被结构中的其他成员访问, 又可以被结构外的其他成员访问 把结构体的struct换成class即成为类的定义 类的数据成员默认访问权限是私有的,类的成员和结构体成员的访问方式一致,都是用点 #include<iostream> using namespace std; class stu{ public : int num; void setAge(int a) { age = a;//即使age在下面定义也可以在上面先使用,C++认为类是一个整体 } int getAge(void) { return age; } private: int age; char name[100]; }; int main() { stu lucy; lucy.num=100; cout << "lucy.num = "<< lucy.num<<endl; lucy

面向对象程序设计寒假作业2

↘锁芯ラ 提交于 2020-02-05 18:14:12
这个作业属于哪个课程 2020面向对象程序设计 这个作业要求在哪里 面向对象程序设计寒假作业2 这个作业的目标 1.继续完成编程题 2.新建一个github仓库,并把作业推送到该仓库 3.发布博客 作业正文 实践题 编程题 其他参考文献 ... 编程题 1.继续完成作业一的编程题。 2.优化架构,一般要求每个函数长度不超过15行。 3.优化规范,尤其是命名规范。 4.制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。 代码优化 在上次作业完成后,我将自己的代码与其他同学进行对比,发现上次作业代码中缺少了对输入数据的要求判断函数。故本次作业代码较上次作业增加了检测用的函数。 #include <iostream> #include <string.h> using namespace std; const char jia[]="增加"; const char jian[]="减少"; const char check[]="看看"; const char wallet[]="钱包"; const char num[11][3]={"零","一","二","三","四","五","六","七","八","九","十"};//定义题设的常量汉字关键词 int w,*p=&w;//通过指针使“钱包

最简单的Tcp Udp的例子

岁酱吖の 提交于 2020-02-05 11:25:15
//1.WinSock包含2个主要的版本,即WinSock1和WinSock2.前者需要包含头文件WinSock.h和库文件wsock32.lib,后者需要包含头文件WinSock2.h和库文件ws2_32.lib用于提供对网络相关API的支持。 //2.WSAData结构体的定义 typedef struct WSAData { WORD wVersion; WORD wHighVersion; #ifdef _WIN64 unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; #else char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; #endif } WSADATA, FAR * LPWSADATA; //3.MAKEWORD()

oracle常用函数积累

佐手、 提交于 2020-02-05 08:54:21
--oracle常用函数积累-- --1、字符串长度:LENGTH ,语法: CONCAT(string) --示例 select LENGTH('AA_BB') from dual;--结果:5 --2、字符串连接:CONCAT,语法: CONCAT(string1,string2) --示例 select CONCAT('AA','_BB') from dual;--结果:AA_BB --简单点,用双竖线即可 select 'AA'||'''-'''||'BB' from dual;--结果:AA'-'BB,单引号要用''转义 --3、字符串替换:REPLACE,语法:REPLACE(string,search_str[,replace_str]); --示例 select REPLACE('AA_BB','BB','CC') from dual;--结果:AA_CC select REPLACE('AA_BBBB','BB') from dual;--结果:AA_ --4、字符串截取:SUBSTR,语法: SUBSTR(string,start_position,[length]),string 源字符串,start_position开始位置(从0开始), length 可选项,截取的个数 --示例 select SUBSTR('AA_BB',0,2) from dual;-