char函数

函数传参

久未见 提交于 2019-12-01 09:53:34
void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); // 值传递,单向传递,拷贝传递。 strcpy(str, "hello world"); printf(str); } str 不能获得 p 所指向的内存空间, 形参值的改变不会影响实参值 ;并且 malloc 开辟的堆空间最后没有释放。 来源: https://www.cnblogs.com/dannykong/p/11676945.html

如何实现带可变长参数的函数

…衆ロ難τιáo~ 提交于 2019-12-01 09:50:48
关于如何实现带可变长参数的函数,先看这两篇文章。 https://www.ibm.com/developerworks/cn/linux/l-va/index.html 以及 https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/va-arg-va-copy-va-end-va-start?view=vs-2019 统称带可变长参数的函数为VA函数,variable argument function。 1,声明 VA函数的原型声明包括两部分:个数确定的固定参数部分和个数不确定的可选参数部分。 type VAFunction(type arg1, type arg2, …); 其中可选参数部分由 … 表示。 2,思路简单描述 VA函数的实现简单说就是对参数指针的使用和控制。对于固定参数部分,可以直接从函数定义中获得;对于可选参数部分,先将指针指向第一个可选参数,然后依次后移指针,直到指针指向结束标志为止。因此VA函数必须先约定好结束标志。 3,VA的宏定义 C提供了一系列独立于硬件架构和硬件平台的宏用于实现VA函数,这些宏都定义在stdarg.h中。关键的几个如下: 1) va_list arg_prt; va_list是指向char的指针,X86下va_list的定义如下: typedef char*

结构和联合

喜夏-厌秋 提交于 2019-12-01 09:26:48
结构和联合 阅读目录2904628156 结构体基础 结构的存储分配 作为函数参数的结构 位段 联合 回到目录 结构体基础 聚合类型 聚合类型: 能够同时存储超过一个单独的数据,C语言提供两种聚合数据类型数组和结构。 数组和结构的区别: 数组是相同类型的数据的聚合,结构是不同类型数据的聚合。 因为数组的元素长度相同可以采用下标方式访问,结构成员的长度不同,只能通过 名字 访问,不能通过下标来访问。 数组名在表达式中使用时被当做一个指针,而结构体变量在表达式中使用时不能被当做一个指针。 结构体的声明 结构的通常形式 struct tag(可选) { member-list }variable-list(可选); 基于以上形式,结构可以有如下几种声明: //形式1 struct { int age; char name[10]; } Person1, Person2; //形式2 struct PersonT { int age; char name[10]; } Person1; struct PersonT Person2; //形式3 struct PersonT { int age; char name[10]; }; struct PersonT Person1, Person2; 在形式2和形式3种,使用结构标签可以在将来的声明中用struct tag 作为struct

C++继承和多态

你说的曾经没有我的故事 提交于 2019-12-01 08:44:42
C++继承和多态 继承和派生 C++ 中的继承是类与类之间的关系, 继承(Inheritance) 可以理解为一个类从另一个类获取成员变量和成员函数的过程。 派生(Derive) 和继承是一个概念, 被继承的类称为父类或基类,继承的类称为子类或派生类。“子类”和“父类”通常放在一起称呼,“基类”和“派生类”通常放在一起称呼 当你创建的新类与现有的类相似 当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承 class Student: public People 继承的一般语法为: class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 }; 继承方式: 包括 public(公有的)、private(私有的)和 protected(受保护的),此项是可选的,如果不写,那么默认为 private。 C++三种继承方式 继承方式 限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected(受保护的)。此项是可选项,如果不写,默认为 private(成员变量和成员函数默认也是 private) public、protected、private 指定继承方式 1) public继承方式 基类中所有 public 成员在派生类中为 public 属性;

串口通信

冷暖自知 提交于 2019-12-01 08:22:18
/////////////////////// ////这是头文件的代码,主要是定义了一个类 /////////////////////////////// #ifndef SERIALPORT_H_ #define SERIALPORT_H_ #include <process.h> #include "TChar.h" #include <string> #include <sstream> #include <iostream> #include <iomanip> #include <algorithm> #include <iterator> #include <cctype> #include <Windows.h> using namespace std; /** 串口通信类 * * 本类实现了对串口的基本操作 * 例如监听发到指定串口的数据、发送指定数据到串口 */ typedef enum AxisType { AXIS_XX = 2, AXIS_YY = 3, AXIS_ZZ = 1, AXIS_OO = 4, }AXIS_TYPE; class CSerialPort { public: CSerialPort(void); ~CSerialPort(void); public: /** 初始化串口函数 * * @param: UINT portNo 串口编号

算法第二章递归与分治策略小结

北战南征 提交于 2019-12-01 08:03:22
第2章 递归与分治策略 2.1.递归的概念 递归算法:直接或间接地调用自身的算法 递归函数:用函数自身给出定义的函数 !!!!递归函数的第一句一定是if语句作为边界条件,然后就是递归方程 如:阶乘函数的第一句就是if条件语句 1 int factorial(int n){ 2 if( n ==0) 3 return 1; 4 return n*factorial(n-1); 5 } ※※※递归函数中比较著名的是Hanoi塔问题 Hanoi塔问题。 设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座c上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: 规则1:每次只能移动1个圆盘; 规则2:任何时刻都不允许将较大的圆盘压在较小的圆盘之上; 规则3:在满足规则1和2的前提下,可将圆盘移至a,b,c中任一塔座上。 hanoi塔问题题目描述 1 #include<iostream> 2 using namespace std; 3 void move(char p1,char p2){ 4 cout<<p1<<"->"<<p2<<endl; 5 } 6 7 //将a上的n个盘子经b移动到c上 8 void hanoi(int n,char a,char b,char

第四次作业 结队编程

旧巷老猫 提交于 2019-12-01 07:26:53
GIT地址 点击查看 结队伙伴 杜文锋201831061119 一 PSP表格 二 接口的设计与实现过程 a.设计思路 b 代码实现思路 源码: 1 #define _CRT_SECURE_NO_WARNINGS 2 #include<iostream> 3 #include<stdlib.h> 4 #include<string.h> 5 #define MAX 1000000 6 using namespace std; 7 8 typedef struct node { 9 char word[100]; 10 int n; 11 }Node; 12 13 int lines = 0;//文件有效行数 14 int characters = 0;//文件字符数 15 16 int isLetter(char c) { 17 if (c <= 'Z' && c >= 'A' || c <= 'z' && c >= 'a') { 18 return 1; 19 } 20 return 0; 21 }//判断是不是字母 22 23 int isDigit(char c) { 24 if (c <= '9' && c >= '0') { 25 return 1; 26 } 27 return 0; 28 }//判断是不是数字 29 30 int isletterOrDigit

个人第四次作业:结对编程

浪尽此生 提交于 2019-12-01 07:24:16
个人第四次作业:结对编程 阅读与准备作业 本作业属于的课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign 本作业的要求 https://www.cnblogs.com/harry240/p/11524113.html 队友博客 https://www.cnblogs.com/zwj-958654064/ 队友学号 201731062520 1、Github项目地址: https://github.com/jie958654064/WordCount 2、PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) Planning 计划  35 Estimate 估计这个任务需要多少时间  65 Development 开发  50 Analysis 需求分析 (包括学习新技术)  15 Design Spec 生成设计文档  10 Design Review 设计复审 (和同事审核设计文档)  10 Coding Standard 代码规范 (为目前的开发制定合适的规范)  5 Design 具体设计  20 Coding 具体编码  90 Code Review 代码复审  45 Test 测试(自我测试,修改代码,提交修改)  60

strcpy和memcpy的区别(转)

你。 提交于 2019-12-01 07:22:15
strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 已知strcpy函数的原型是:char* strcpy(char* dest, const char* src); memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。 void *memcpy( void * dest , const void * src , size_t count ); char * strcpy ( char * dest, const char * src) // 实现src到dest的复制 {    if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性   {        return NULL;   }    char *strdest = dest; //保存目标字符串的首地址    while ((*strDest++ = *strSrc++)!= '\0' ); //把src字符串的内容复制到dest下    return strdest; } void * memcpy ( void *memTo, const void *memFrom, size_t size)

缓存io和非缓存io

不想你离开。 提交于 2019-12-01 07:22:07
首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Programming Interface,API),我们要在这个系统上编写各种应用程序,就是通过这个API接口来调用系统内核里面的函数。如果没有系统调用,那么应用程序就失去内核的支持。 现在,再聊不带缓存的I/O操作: linix对IO文件的操作分为不带缓存的IO操作和标准IO操作(即带缓存),刚开始,要明确以下几点: 1:不带缓存,不是直接对磁盘文件进行读取操作,像read()和write()函数,它们都属于系统调用,只不过在用户层没有缓存,所以叫做无缓存IO,但对于内核来说,还是进行了缓存,只是用户层看不到罢了。如果这一点看不懂,请看第二点; 2:带不带缓存是相对来说的,如果你要写入数据到文件上时(就是写入磁盘上),内核先将数据写入到内核中所设的缓冲储存器,假如这个缓冲储存器的长度是100个字节,你调用系统函: ssize_t write (int fd,const void * buf,size_t