![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
huizhang0110
厚积薄发
展开
-
c++11 lambda函数
C++11添加了lambda函数的新功能,在使用过程中将匿名函数作为函数参数传递将会变得非常的简洁。在之前一般使用函数指针和函数符将函数作为参数传递给另外一个参数。 /** 匿名函数 * 1. lambda匿名函数离使用的位置最近,进行修改非常方便 * 2. 使用auto mod3 = [](int x) { return x % 3 == 0; }; 可以像常规函数一样使用匿名原创 2017-10-31 16:39:46 · 314 阅读 · 0 评论 -
使用C++类模板,出现链接错误
在定义一个模板类的时候,将类模板成员函数放在独立的cpp实现文件中,将模板类声明放在一个h文件中。在一个文件中需要使用到这个类,直接include头文件发现出现链接错误。由于模板不是函数,只是一些C++编译器指令,说明了如何生成类和成员函数定义,无法单独编译成obj文件,因此不能将模板成员函数放在独立的实现文件中。模板必须与特定的模板实例化请求一起使用,最简单的方法是将所有的模板信息放在一个头文件中原创 2017-10-12 10:38:14 · 4426 阅读 · 0 评论 -
活用宏定义
今天在看x86虚拟机源代码的时候,看到一个非常有意思的宏定义,记录下来说不定以后可以参考一下: 作者使用枚举类型定义各个按键的码,但不是常规的做法,而是在其中使用了宏。 在软件开发的过程中,宏因为理解不易,所以是大忌,但是因为其字符替换是在编译前期,活用宏还是可以达到一些意想不到的效果,比如用来写一些模板函数。#include <iostream>#define _KEYS(_) \ _(E原创 2017-10-09 13:30:21 · 219 阅读 · 0 评论 -
C/C++中的逻辑右移、算数右移、循环左移、循环右移
C/C++语言中逻辑右移和算数右移共享同一个运算符>>,编译器决定使用逻辑右移还是算数右移,根据的是运算数的类型。如果是unsigned则采用逻辑右移,如果是signed则采用算数右移。对于signed类型的数据,如果需要使用算数右移,或者unsigned类型的数据需要使用逻辑右移,都需要进行类型转换。实例代码如下:#include <iostream> int main(){ int a =原创 2017-10-08 21:39:19 · 23177 阅读 · 1 评论 -
数组环形扫描
在每次扫描结束的时候,更新当前矩形的边际即可#include <stdio.h>#include <stdlib.h>#include <assert.h>int * newIntRaw(int n){ return (int *)malloc(sizeof(int) * n);}int ** newMap(int n, int m){ int i; int **原创 2017-09-15 19:08:51 · 508 阅读 · 0 评论 -
以科学计数法打印浮点数
如下,从文件中读取两个浮点数,并按照科学计数法打印出其和#include <stdio.h>#include <stdlib.h>int main(){ FILE *fp; double d1, d2; fp = fopen("string.in", "r"); if (fp == NULL) { printf("can not open file!原创 2017-09-14 23:48:32 · 2270 阅读 · 0 评论 -
使用宏定义进行拼接
今天在翻看别人用C语言写的框架代码的时候注意到了大量的使用宏拼接,以此进行C风格的模板设计。一直没有想到原来C的宏可以这么使用,记录下来张点见识!#include <stdio.h>#define concat(x, y) x ## yint main(){ printf("%d\n", concat(1, 2)); return 0;}原创 2017-09-22 21:25:33 · 3414 阅读 · 0 评论 -
结构体、结构体体指针作为函数返回值
函数使用结构体、结构体指针作为返回值分析32位机,gcc编译器使用结构体作为返回值分析反汇编代码可知,当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变量接受返回值),并将这段空间的地址作为调用时的参数压栈。子程序不负责对要返回的结构体分配空间。最后返回eax中存放的是结构体空间(栈中)的地址。在子程序退出的时候,调用函数可以在自己的栈帧中访问到返回的原创 2017-06-29 18:48:24 · 49469 阅读 · 6 评论 -
int *和int[]共同点和区别
如 int *a 和 int b[]相同点a和b的值都表示一片内存区域的地址,都是使用int型进行管理作为函数的形式参数没有任何区别区别a是一个变量,需要分配内存空间进行存储,而b是程序中的一个标号,给编译器提供地址信息,不需要进行保存。因此可以在程序中改变a,但是无法在程序中改变b。可以使用int b[]定义数组,如 int b[] = {1, 2, 3, 4}, 但是无法使用int *a原创 2017-10-14 14:22:45 · 5073 阅读 · 0 评论