char函数

C++笔记(3):一些C++的基础知识点

99封情书 提交于 2020-02-26 23:05:08
前言: 找工作需要,最近看了下一些C++的基本概念,为范磊的 《零起点学通C++》,以下是一些笔记。 内容:   delete p;只是删除指针p指向内存区,并不是删除指针p,所以p还是可以用的。删除空指针所指向内存是可以的。   堆中的变量和对象时匿名的,没有名称,只能通过指针来访问。   在堆中创建对象时,在分配内存的同时会调用类的构造函数,在删除堆中对象时,会调用类的析构函数。   为了避免内存泄露,在删除一个指针后应该将其其值赋为0。   常量指针是指针指向的内存区域地址不能改变,但是该内存地址里保存的值是可以改变的,比如int a; int * const p = &a;   指向常量的指针表示指针指向的对象是不能被修改的,但是该指针可以被修改,即该指针可以指向另一块目标内存地址。比如const int a = 0; const int *p = &a; 如果A是一个类,也可以为const A* p = new A;   而指向常量的常指针表示指针本身不能被修改,其指向的内存地址内容也不能被修改。比如const int a = 0; const int * const p = &a;   引用就是别名常量。   堆中的地址是用指针来操作的,用不到别名。   如果在main函数前面的其它函数的声明和定义是一起的,则表明这个函数是内联函数!因此当该函数较长时

JarvisOJ (pwn)guess

删除回忆录丶 提交于 2020-02-26 14:50:27
先看一下函数结构: main: int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { struct sockaddr addr; // [rsp+0h] [rbp-20h] __pid_t v4; // [rsp+14h] [rbp-Ch] int v5; // [rsp+18h] [rbp-8h] int fd; // [rsp+1Ch] [rbp-4h] fd = socket(2, 1, 0); if ( fd == -1 ) { perror("unable to create server socket"); exit(1); } *&addr.sa_family = 0LL; *&addr.sa_data[6] = 0LL; addr.sa_family = 2; *addr.sa_data = htons(0x270Fu); if ( bind(fd, &addr, 0x10u) ) { perror("unable to bind socket"); exit(1); } if ( listen(fd, 16) ) { perror("deaf"); exit(1); } while ( 1 ) { while ( 1 ) { v5 = accept(fd, 0LL

将'const'用于功能参数

妖精的绣舞 提交于 2020-02-26 14:00:20
你用 const 走多远? 您只是在必要时使函数为 const 还是在整个过程中都使用它? 例如,假设有一个简单的变量,它带有一个布尔值: void SetValue(const bool b) { my_val_ = b; } 那个 const 实际上有用吗? 我个人选择广泛使用它,包括参数,但是在这种情况下,我想知道它是否值得? 我也惊讶地发现您可以从函数声明中的参数中省略 const ,但可以将其包含在函数定义中,例如: .h文件 void func(int n, long l); .cpp文件 void func(const int n, const long l) 是否有一个原因? 对我来说似乎有点不寻常。 #1楼 从API的角度来看,多余的const是不利的: 在代码中为值传递的内在类型参数添加多余的const会使 您的API混乱, 而对调用者或API用户没有任何有意义的承诺(这只会妨碍实现)。 当不需要时,API中太多的“ const”就像“ 哭泣的狼 ”,最终人们会开始忽略“ const”,因为它遍地都是,在大多数时候没有任何意义。 API中额外的const的“ reducio ad absurdum”参数对于前两点是好的,那就是如果更多的const参数是好的,那么每个可以有const的参数都应该有const。 实际上,如果确实如此,您希望const成为参数的默认值

C++多字节与Unicode之间的转化

℡╲_俬逩灬. 提交于 2020-02-26 11:58:47
Unicode Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 char数据类型 C程序中使用char数据类型来定义和存储字符和字符串 下面的声明定义和初始化一个包含单一字符的变量: char c = 'A' ; 定义一个指向字符串的指针: char * p ; 因为Windows是一个32位的操作系统,指针变量p需要4个字节的存储空间。还可以如下初始化一个指向字符串的指针: char * p = "Hello!" ; 更宽的字符 使用Unicode或者是宽字符并不会改变C语言中的字符数据类型。char类型继续代表一个字节的存储空间,而且sizeof(char)继续返回1.理论上来说,C语言中的一个字节可能长于8位,但是对于大多数人来说,一个字节(因而就是一个char)是8位宽。 C语言中的宽字符是基于wchar_t数据类型的。这个数据类型被定义在多个头文件中,包括WCHAR.H,如下所示: typedef unsingned short wchar_t ; 因此,wchar_t数据类型和一个无符号短整型一样,都是16位宽。 可以用下面的语句来定义一个包含单个宽字符的变量

剑指offer 面试50题

时光总嘲笑我的痴心妄想 提交于 2020-02-26 09:41:49
面试50题: 题目:第一个只出现一次的字符 题:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。 解题思路一:利用Python特性 # -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here if not s or len(s)<=0: return -1 for i in s: if s.count(i)==1: return s.index(i) return -1 解题思路二:自定义一个哈希表,键值key为字符,值value为该字符出现的次数。 # -*- coding:utf-8 -*- class Solution: def FirstNotRepeatingChar(self, s): # write code here if len(s)<=0: return -1 char_dict={} for i in s: if i in char_dict: char_dict[i]+=1 else: char_dict[i]=1 for index,value in enumerate(s): if char_dict[value]==1: return index return -1

实验五

冷暖自知 提交于 2020-02-26 06:25:22
// 练习:使用二分查找,在一组有序元素中查找数据项 // 形参是数组,实参是数组名 #include <stdio.h> #include <stdlib.h> const int N=5; int binarySearch(int x[], int n, int item); // 函数声明 int main() { int a[N]={2,7,19,45,66}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); // 调用函数binarySearch()在数组a中查找指定数据项item,并返回查找结果给index // 补足代码① index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n", key, index); else printf("%d不在数组中\n", key); system("pause"); return 0; } //函数功能描述: //使用二分查找算法在数组x中查找特定值item,数组x大小为n // 如果找到,返回其下标 // 如果没找到,返回-1 int

C++野指针的存在方式和误区

♀尐吖头ヾ 提交于 2020-02-26 02:40:48
1. char* x;这样的一定是野指针,指针声明时要直接初始化!或者置null也行! 2. 1 int main() 2 { 3 char *x=new char; 4 delete x; 5 cout<<*x; 6 getchar(); 7 return 0; 8 } delete x;之后,x就是一个野指针。 1 int main() 2 { 3 char *x=new char[10]; 4 cout<<*x; 5 strcpy(x,"dqwdqw"); 6 delete []x; 7 cout<<x; 8 getchar(); 9 return 0; 10 } 这段代码是能运行的,但delete[]x;之后,x就成为了一个野指针,输出的结果是未定义的。这里我们应该加上: x=nullptr; 或者malloc之后free掉的指针,也是上面的情况,一定要把指针置null。 3. 函数参数为二级指针&p,将p指向了函数中的临时变量。函数调用完毕后,p这个指针就变为了野指针。 1 int f(char** x){ 2 char p=97; //'a' 3 *x=&p; 4 } 5 int main() 6 { 7 char a=65; //'A' 8 char *x=&a; 9 f(&x); 10 cout<<*x; 11 getchar(); 12 return 0; 13

迟来的Json反序列化

牧云@^-^@ 提交于 2020-02-26 02:30:59
  源码发布 搞了一个下午,终于搞定了这个号称中国的github...以后源码直接在这里发布了(github实在用不来,英文实在太烂了) https://code.csdn.net/jy02305022/blqw-json   相关回顾 一种简单,轻量,灵活的C#对象转Json对象的方案 一种简单,轻量,灵活的C#对象转Json对象的方案(续)   废话 自从上次发表了Json序列化的方案之后,已经整整一个月了。 原本是想序列化写完马上开始写反序列化的,但是来看了大家的回复之后得到了很多启示,所以这一个月直接在做优化的工作(当然还有带BB)。 我发现博客园真是个好地方,以前在QQ空间,点点,微博发表技术文章的时候根本没有人回复,了不起有几个转载的。。。 在这里大家一起参与讨论,才能获得更多的启示和发现,才能更好的提高自己!   blqw.Json方案整体结构 blqw.Json ├─ JsonBuilder //用于将C#转换为Json字符串 ├─ QuickJsonBuilder //快速的将任意C#对象转换为Json字符串,继承自JsonBuilder ├─ UnsafeStringWriter //程序集可用,未公开对象.以非安全方式访问指针操作字符串直接写入内存,以提高字符串拼接效率 ├─ JsonParser //用于将Json字符串转换为C#对象 └─

存储持续性、作用域和链接性

北城以北 提交于 2020-02-26 00:00:01
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h。 需要定义一个全局变量供这些源文件中使用:方法如下 1、在 state.h声明全局变量: extern inta; 2、在state.cpp中定义该全局变量:int a =10; 这样其它源文件就可以使用该变量啦 这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义: (1)声明必须使用extern关键字;(2)不能给变量赋初值 extern int a; //声明 int a; //定义 int a = 0; //定义 extern int a =0; //定义 头文件中应使用extern关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。 头文件请不要定义任何变量,那是非常业余的行为…… 一般在头文件中申明,用extern,在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。 头文件只能申明全局变量(extern),不可定义(不推荐使用) .cpp里,在最外层定义即可(int gi),直接引用 如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效

从无到有用Python创造一门属于自己的编程语言1

安稳与你 提交于 2020-02-25 23:37:24
前言 如果你会编译原理,对其中的词法分析算法,语法分析算法足够了解,那么用什么语言来做这样的一件事情都是可以的,之所以使用Python只是因为本人会的编程语言中, Python的使用时间最长,也最得心应手。所谓性能什么的不在本文的考虑范围内, 本文主要重点是语法分析的表达式的解析,语法解析使用的是普拉特分析法,一种自顶向下的语法解析方法。 文章目录如下: 四则运算的问题 词法分析 语法分析与解释执行 参考链接 这有什么用 后记 源代码 四则运算的问题 怎么解决让代码算出以下解决结果?(假设问题代码保存文1.txt) 1 + 2 * 3 - 4 / 5 不用语法分析, 最简答的解决办法就是 with open("1.txt") as rf: print(eval(rf.read())) # 输出结果 6.2 那么如果是以下面的代码呢?(假设问题代码保存文2.txt) add(1, add(1,2)) 不用语法分析, 最简单的解决办法是 def add(a, b): return a + b with open("2.txt") as rf: print(eval(rf.read()), dict(add=add)) # 输出结果 4 {'add': <function add at 0x0000013E8033AD90>} 如果要求加法的优先级大于乘法呢?就是说先加后乘,比如1+2