char函数

c/c++ 函数指针的用法

戏子无情 提交于 2020-03-07 07:02:16
【目录】 基本定义 c 函数指针使用举例 c++ 函数指针使用举例 函数指针作为函数参数 函数指针作为函数返回值 函数指针数组 typedef 简化函数指针操作 c语言函数指针的定义形式: 返回类型 (* 函数指针名称 )( 参数类型 , 参数类型 , 参数类型, …); c++函数指针的定义形式 : 返回类型 (类名称 ::* 函数成员名称)(参数类型,参数类型,参数类型, ….); 以下代码编译环境:codeblocks with gcc in win 7 c语言函数指针使用举例: #include <stdio.h> #include <stdlib.h> int fun1() { printf("this is fun1 call\n"); return 1; } void fun2(int k, char c) { printf("this is fun2 call:%d %c\n", k, c); } int main() { int (*pfun1)() = NULL; void (*pfun2)(int, char) = NULL; int a,b; pfun1 = fun1; //第一种赋值方法 a = pfun1(); //第一种调用方法(推荐) printf("%d\n",a); b = (*pfun1)();//第二种调用方法 printf("%d\n",b

C++ 中的 sizeof()

你说的曾经没有我的故事 提交于 2020-03-07 04:07:02
【牛客题目1】在Visual C++ 和 Mingw64平台上,short a[100], sizeof(a) 返回什么? A. 2 B. 4 C. 100 D. 200 E. 400 答案:D Reference: https://www.nowcoder.com/test/question/done?tid=31013888&qid=1490#summary 解析:short int: 2个字节 【1.1】 sizeof 返回的数值表示的含义如下(单位字节) 数组 - 编译时分配的数组空间大小 【1.1】(特别地,若数组作为参数被传入函数中做sizeof()运算,则和指针运算没区别)【1.2】 指针 - 存储该指针所用的空间大小 (存储该指针的地址长度,是长整型,应该为4) 【2】 类型 - 该类型所占用的空间大小 【3】 对象 - 对象的实际占用空间大小 【4】 函数 - 函数的返回类型所占的空间大小。函数的返回类型不能是void【5】 【题目2-13】 1 char str[] = "Hello"; 2 char *p = str; 3 int n = 10; 4 sizeof(str) = 6; // H,e,l,l,o,\0 [1.1] 5 sizeof(p) = 4; // [2] 6 sizeof(n) = 4; // [3] 7 void Func(char

c++ string转char* char字符数组转字符串 push_back使用方法

别说谁变了你拦得住时间么 提交于 2020-03-06 16:40:36
c++ string转char* 1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。 2、const char *c_str(); c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式. 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char* c; string s="1234"; c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理 应该这样用: char c[20]; string s="1234"; strcpy(c,s.c_str()); 这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作 再举个例子 c_str() 以 char* 形式传回 string 内含字符串 如果一个函数要求char*参数,可以使用c_str()方法: string s = "Hello World!"; printf("%s",s.c_str()); /

语言中结构体变量和结构体类型的定义

让人想犯罪 __ 提交于 2020-03-06 13:43:49
1. 结构体类型定义 定义方式1 : Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *LinkList; 定义方式2 : struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } ; Typedef struct LNode *LinkList; 以上两个定义方式是等价的,是将*LinkList 定义为struct LNode 类型,即LinkList 被定义为一个类型名。这样就可以用LinkList 来定义说明新的变量了,如: LinkList L ; 即将L 定义为struct LNode 类型的指针变量 2. 结构体类型变量定义 定义方式1 : struct LNode { int data; // 数据域 struct LNode *next; // 指针域 }LnodeA ; 定义方式2 : struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } ; struct LNode LnodeA ; 以上两个定义方式也是等价的,这样就将LnodeA 定义为一个truct LNode 类型的变量,即LnodeA 为一个truct LNode 类型的变量名。

winsocket <研究了一天的成果>

我的未来我决定 提交于 2020-03-06 04:32:49
首先,这都是套路( ▼-▼ ) 头文件 #include <WinSock.h> #include <Winsock2.h> 用这个,这个是升级版 各个函数解释 1、 WSAStartup: 初始化套接字环境,本函数必须是应用程序或DLL调用的第一个Windows Sockets函数.它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节.应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数. int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); 实际用例 //begin 初始化网络环境 int err = WSAStartup(MAKEWORD(2, 2), &wsaData); if ( err != 0) { printf("WSAStartup failed with error: %d\n", err); return -1; }//end 2、 WSACleanup: 清理套接字环境,和上面的WSAStartup相反,该函数是在程序不在对任何Windows Sockets函数调用后,用其来清理套接字环境的 int WSACleanup (void); 3、

JavaSE!面向对象!!!!

情到浓时终转凉″ 提交于 2020-03-06 03:21:27
1. 面向对象的编程思想: 面向对象的编程思想就是把一个事物看成一个整体,把这个事物中的属性(特征)和功能(方法)表述出来。 面向对象的编程思想更贴近于人的正常思维方式。 面向对象的编程思想来源于生活服务于生活。 面向对象的编程思想中,一定会用到面向过程(以流程为基本单位,注重最后结果。)的编程思想。有缺陷:功之间有很强的关联。不利于程序的维护和扩展。 面向对象的特征: 抽象!! 封装!! 继承!! 多态!! 。 2. 对象 在现实生活中,具体存在的一个事物。 在java编程中,万事万物皆对象。 特点: 在java编程中,无论两个事物多么相近或是相似,他们永远都是两个不同的对象。 各种法律、规则制度也是一种对象。 对象的内存图解 1 1.在堆内存中开辟一个空间并分配地址 2.按照类的描述,在该空间中定义成员变量 并且有默认初始化值 3.加载成员函数进入方法区(只加载一次) 4.对象创建完毕 将空间地址赋值给相应的变量 5.变量(p1/p2)调用成员变量 先通过该变量所存储的地址去堆空间中找 然后在该空间中找相应的成员变量 6.变量(p1/p2)调用成员函数 直接去方法区中找该成员函数 将该函数加载进栈内存开始运行 为了方便区分哪个对象调用的该成员函数 由this这个关键字段 来区分 this主要存的是当前对象的地址 注意:当成员函数在操作变量的时候 先在当前函数的空间里找 局部变量

数据库mysql

半世苍凉 提交于 2020-03-05 16:22:59
内容回顾 day35 # 并发编程 # io操作 : input/output # 阻塞 非阻塞(get_nowait) 同步 异步(start terminate submit map) 并发 并行 # 进程的三状态图 : 阻塞 运行 就绪 # 进程 计算机中最小的资源分配单位 # 进程之间数据隔离\资源不共享 # 可以利用多个CPU # 开启和销毁的开销大 # 由操作系统负责调度 # multiprocessing模块 # Process类 : 开启进程 # 各种操作进程的方法 # 守护进程 : 守护到主进程的代码结束 # IPC : 进程之间通信 # 基于文件Queue Pipe\基于网络 socket 第三方工具 # 进程中的互斥锁 Lock :性能好 # 进程中的递归锁 RLock : 效率低 # 递归锁可以锁多次不会发生死锁 # 线程 # 计算机中能够被操作系统调度的最小单位 # 线程之间资源共享 # 可以利用多核 # 开启和销毁的开销小 # 由操作系统负责调度 # GIL锁 : 全局解释器锁 互斥锁 # 导致了Cpython解释器下 同一个进程下的多个线程 不能利用多核 # 由于垃圾回收机制gc不能在多线程环境下正常进行引用计数 # threading模块 # Thread类 # 开启线程 # 守护线程 : 守护整个主线程的 # 子线程先结束 # 主线程结束 #

QT之编码风格(low-level)

亡梦爱人 提交于 2020-03-05 15:33:25
原文: https://wiki.qt.io/Qt_Coding_Style 缩进 用4个空格进行缩进 是空格,不是tab 声明变量 在单独的一行声明每一个变量 避免过短或者无意义的变量名(例如:“a”, “rbarr”, “nughdeget”) 单个字符只能用在诸如计数器或者临时变量等作用明显的场合 只有当确定需要这个变量的时候,我们才去声明它 // Wrong int a , b ; char * c , * d ; // Correct int height ; int width ; char * nameOfThis ; char * nameOfThat ; 变量名或者函数名以小写字母开始,变量名后面的每一个连续的单词要用大写字母开始 避免缩写 // Wrong short Cntr ; char ITEM_DELIM = ' ' ; // Correct short counter ; char itemDelimiter = ' ' ; 类总是以大写字母开始。公共类以字母’Q’跟上一个大写字母开始。公共函数大多以字母’q’开始。 首字母缩略词是驼峰式的(e.g. QXmlStreamReader, not QXMLStreamReader) 空格 使用空行将语句组合在一起 始终只使用一个空白行 始终在关键字之后和花括号前使用一个空格 // Wrong if (

MySQL(三)数据类型

北城余情 提交于 2020-03-05 15:16:40
存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,宽度是可选的。 一、数值类型 1、整数类型:tinyint smallint mediumint int bigint    作用:存储年龄,等级,id,各种号码等   ps:默认都是有符号的    注意:整型的宽度指的是显示宽度,并不是存储宽度 在mysql5.7中整数类型和5.6是有区别的,5.7中不是默认给你变化的,不能超过宽度范围,超过就告诉你(“id”的值超出范围值),而5.6中过多是最大的,过少是最小的 用zerofill测试整数类型的显示宽度 是用int测试 以下是5.6版本: 无符号: 2、浮点类型:FLOAT,DOUBLE,DECIMAL    作用:体重,薪资,价格    float:单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30    double:双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30    decimal:准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。    精确度:       **** 随着小数的增多,精度始终准确 **** 对于精确数值计算时需要用此类型

关于sprintf 和 snprintf的自拷贝

爷,独闯天下 提交于 2020-03-05 13:36:45
朋友出了这样一道题: char buf[100]; memset(buf, 0, 100); strcpy(buf, "hello"); sprintf(buf, "%s world\n", buf); printf("%s\n", buf); 结果是什么? 在不同的编译器上,结果不同,有的显示" world",有的显示"hello world",我们发现,对于这种自拷贝的问题,编译器可以有不同的策略,有的简单的把原先的值抹去,有的会保留,为了详细说明,我们自己动手写一个试试看。 【实践】: 思想:在内部创建一个临时buffer,去代替des,然后,实际操作sprintf/snprint,最后,把buffer中的内容导入des即可。 为了突出重点,这里只是针对%s作了处理,代码如下: test.cpp: #include <stdio.h> #include <string.h> #include <stdlib.h> /* * des : 目标buffer * size : 限定目标buffer的最大尺寸 * strategy : 当目标buffer与源buffer相同时,是否要拷贝原来的值 * 0 不拷贝 * 非0 拷贝 * return : 0 正确 * 非0 失败 */ int mysnprintf(char *des, size_t size, int strategy,