指针变量

C++常见问题:引用和指针的区别

最后都变了- 提交于 2020-01-07 08:55:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 指针和引用的区别 (1)引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针. 由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值. String & rs = string1; 由于没有所谓的 null reference 所以所以在使用前不需要进行测试其是否有值.,而使用指针则需要测试其的有效性. (2)指针可以被重新赋值而reference则总是指向最初或地的对象. (3)必须使用reference的场合. Operator[] 操作符 由于该操作符很特别地必须返回 [能够被当做assignment 赋值对象] 的东西,所以需要给他返回一个 reference. (4)其实引用在函数的参数中使用很经常. void Get***(const int& a) //这样使用了引用有可以保证不修改被引用的值 { } 引用和指针 ★ 相同点: 1. 都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用

C++使用模板、函数指针、接口和lambda表达式这四种方法做回调函数的区别比较

a 夏天 提交于 2020-01-07 08:42:05
在C++中,两个类之间存在一种关系,某个类需要另外一个类去完成某一个功能,完成了之后需要告知该类结果,这种最普通最常见的需求,往往使用回调函数来解决。 如题,我总结下来有这么四种方式可以完成这项功能,下面来一一分析: 1、使用模板 // CppTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <stdlib.h> #include <math.h> template<typename T> class MathTemplate { int ops1,ops2; int result; public: void Add(int a,int b,T callback) { ops1 = abs(a); /* 实际上这个函数可能非常复杂,非常耗时,这样回调更突显作用*/ ops2 = abs(b); result = ops1+ops2; callback.showResult(result); } }; class Result { public: void showResult(int res) { printf("result = %d\n",res); } }; int _tmain(int argc, _TCHAR* argv[]) { Result reShow; MathTemplate<Result>

如何判断一个变量是指针

我们两清 提交于 2020-01-07 05:17:27
1、面试问题 编写程序判断—个变量是不是指针。 2、指针的判别 拾遗 C++中仍然支持C语言中的可变参数函数 C++编译器的匹配调用优先级 1. 重载函数 2. 函数模板 3. 变参函数 思路 将变量分为两类:指针 vs 非指针 编写函数:指针变量调用时返回true ,非指针变量调用时返回false 函数模板与变参函数的化学反应 template <typename T> bool IsPtr(T* v) // match pointer { return true; } bool IsPtr(...) // match non-pointer { return false; } 编程实验 指针判断 test.cpp #include <iostream> using namespace std; class Test { public: Test() { } virtual ~Test() { } }; template <typename T> bool IsPtr(T* v) // match pointer { return true;} bool IsPtr(...) // match non-pointer {   return false; } int main(int argc, char *argv[]) {   int i = 0;   int* p = &i;

Go从入门到放弃(笔记存档)

岁酱吖の 提交于 2020-01-07 00:49:46
前言 考虑到印象笔记以后不续费了,这里转存到博客园一份 因内容是自己写的笔记, 未作任何润色, 所以看着很精简, 请见谅 查看官方文档 在新的go安装包中,为了减小体积默认去除了go doc 安装go语言后在DOS中输入 godoc -http=:9000 然后在浏览器中打开 127.0.0.1:9000 即可(不能关闭DOS) 该系列参照了大佬的学习路线,加上本人的代码实践,大佬链接 https://www.liwenzhou.com/posts/Go/go_menu 目录结构 GOPATH > src 代码(pkg包/bin编译后文件) > 域名 > 用户名 > 项目 > 模块 双引号单引号 单引号代表字符 > 'a' 双引号代表字符串 > "abcd" 中文最少3位所以只能用双引号 编译代码 进入目录(项目) go build -o 文件名 main.go main.go是项目主入口 调试代码 go run 文件 设置生成文件的格式(跨平台) 命令行 // 生成linux可执行文件 SET CGO_ENABLED=0 //禁用CGO SET GOOS=linux //设置目标平台为linux SET GOARCH=amd64 //目标架构为amd64 // 生成win SET GOOS=windows // 生成mac SET GOOS=darwin git控制 只需控制

Elasticsearch内存占用过高

女生的网名这么多〃 提交于 2020-01-06 17:04:18
Elasticsearch默认安装后设置的内存是1GB,对于任何一个现实业务来说,这个设置都太小了。如果你正在使用这个默认堆内存配置,你的集群配置可能会很快发生问题。 这里有两种方式修改Elasticsearch的堆内存(下面就说内存好了),最简单的一个方法就是指定ES_HEAP_SIZE环境变量。服务进程在启动时候会读取这个变量,并相应的设置堆的大小。设置命令如下: export ES_HEAP_SIZE=10g 此外,你也可以通过命令行参数的形式,在程序启动的时候把内存大小传递给它: ./bin/elasticsearch -Xmx10g -Xms10g 备注: 确保Xmx和Xms的大小是相同的,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源,可以减轻伸缩堆大小带来的压力。 一般来说设置ES_HEAP_SIZE环境变量,比直接写-Xmx10g -Xms10g更好一点。 把内存的一半给Lucene 一个常见的问题是配置一个大内存,假设你有一个64G内存的机器,按照正常思维思考,你可能会认为把64G内存都给Elasticsearch比较好,但现实是这样吗, 越大越好? 当然,内存对于Elasticsearch来说绝对是重要的,用于更多的内存数据提供更快的操作,而且还有一个内存消耗大户-Lucene。

笔记1

╄→гoц情女王★ 提交于 2020-01-06 16:02:55
数据结构定义:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对元素进行排序等)而执行的相应操作,这个相应的操作也叫算法。 数据结构解决存储问题 个体+个体的关系 算法解决操作问题 对存储数据的操作 衡量算法的标准 时间复杂度,空间复杂度,难易程度,健壮性 指针:指针就是地址,地址就是指针;指针变量是存放内存单元地 址的变量;指针的本质是一个操作受限的非负整数。 在这里插入代码片 int main() { int *p; int i=10; int j; j=*p; printf("i=%d,j=%d,*p=%d\n",i,j,*p); return 0; }``` 来源: CSDN 作者: LaaaaughinG 链接: https://blog.csdn.net/LaaaaughinG/article/details/103846163

FreeRTOS 任务栈大小确定及其溢出检测

ε祈祈猫儿з 提交于 2020-01-06 01:42:22
以下转载自安富莱电子: http://forum.armfly.com/forum.php FreeRTOS 的任务栈设置 不管是裸机编程还是 RTOS 编程,栈的分配大小都非常重要。 局部变量,函数调用时的现场保护和返 回地址,函数的形参,进入中断函数前和中断嵌套等都需要栈空间,栈空间定义小了会造成系统崩溃。 裸机的情况下,用户可以在这里配置栈大小: 为什么是堆中的?因为我们采用的就是动态创建任务的方式。如果静态创建,就和我们自己开辟的空间有关,通常静态创建任务用数组作为容器,但是通常静态创建的方式我们都不使用。 FreeRTOS 的系统栈设置 上面跟大家讲解了什么是任务栈,这里的系统栈又是什么呢?裸机的情况下,凡是用到栈空间的地方 都是在这里配置的栈空间: 在 RTOS 下, 上面两个截图中设置的栈大小有了一个新的名字叫系统栈空间 ,而任务栈是不使用这里的空间的。 任务栈不使用这里的栈空间,哪里使用这里的栈空间呢?答案就在中断函数和中断嵌套。  由于 Cortex-M3 和 M4 内核具有双堆栈指针,MSP 主堆栈指针和 PSP 进程堆栈指针,或者叫 PSP 任务堆栈指针也是可以的。在 FreeRTOS 操作系统中,主堆栈指针 MSP 是给系统栈空间使用的,进 程堆栈指针 PSP 是给任务栈使用的。 也就是说,在 FreeRTOS 任务中,所有栈空间的使用都是通过 PSP

链表练习题

我是研究僧i 提交于 2020-01-06 00:44:37
这段时间将会用这版面来记录一些链表的题目,脚踏实地去理解链表和使用链表。加油。(也许不是最优解,但是一定是符合题目要求的而且AC的) 1.移除链表元素 leetcode203题目:删除链表中等于给定值 val 的所有节点。 这是开始写的第一道,准备用3种方式来完成这道题目,记录自己的思路。 1.一般使用head节点完成 思路:既然是链表的删除元素,也只有next才能访问到其他元素,所以从head开始判断就好。 需要分别对head 和head.next进行判断. 其实就是遍历链表:时间复杂度O(N) public ListNode removeElements(ListNode head, int val) { //如果头节点的val就是要找的val, while(head!=null && head.val ==val ){ head = head.next; } //链表的val全是val if(head ==null){ return head; } //删除head.next位置 ListNode prev = head; while(prev.next!=null){ if(prev.next.val == val){ prev.next = prev.next.next; }else{ prev = prev.next; } } return head; } 2

【PHP】文件写入和读取详解

自闭症网瘾萝莉.ら 提交于 2020-01-05 23:52:53
文章提纲: 一.实现文件读取和写入的基本思路 二.使用fopen方法打开文件 三.文件读取和文件写入操作 四.使用fclose方法关闭文件 五.文件指针的移动 六.Windows和UNIX下的回车和换行 一.实现文件读取和写入的基本思路: 1.通过fopen方法打开文件:$fp =fopen(/*参数,参数*/),fp为Resource类型 2.进行文件读取或者文件写入操作(这里使用的函数以1中返回的$fp作为参数) 3. 调用fclose($fp)关闭关闭文件 二:使用fopen方法打开文件 fopen(文件路径[string],打开模式[string]) <1>fopen的第一个参数为文件路径 写文件路径的方式:1绝对路径,2相对路径 1绝对路径: 在windows下工作的小伙伴们应该很熟悉,windows下的路径分隔符是“\”而不是“/”,但我们在写入路径时不能以钦定的“\”为分隔符 那如果我们以“\”分隔符写入路径会怎样呢? <?php $fp = fopen("C:\wamp64\www\text.txt",'w'); ?> 运行后报错,提示路径参数无效 所以我们要把分隔符“\”换成“/”: <?php $fp = fopen("C:/wamp64/www/text.txt",'w'); ?> 运行时无报错,说明参数是有效的。 【注意】fopen函数不能理解“\”分隔符

地址、指针与引用

假如想象 提交于 2020-01-05 10:30:54
计算机本身是不认识程序中给的变量名,不管我们以何种方式给变量命名,最终都会转化为相应的地址,编译器会生成一些符号常量并且与对应的地址相关联,以达到访问变量的目的。   变量是在内存中用来存储数据以供程序使用,变量主要有两个部分构成:变量名、变量类型,其中变量名对应了一块具体的内存地址,而变量类型则表明该如何翻译内存中存储的二级制数。我们知道不同的类型翻译为二进制的值不同,比如整型是直接通过数学转化、浮点数是采用IEEE的方法、字符则根据ASCII码转化,同样变量类型决定了变量所占的内存大小,以及如何在二进制和变量所表达的真正意义之间转化。而指针变量也是一个变量,在内存中也占空间,不过比较特殊的是它存储的是其他变量的地址。在32位的机器中,每个进程能访问4GB的内存地址空间,所以程序中的地址采用32位二进制数表示,也就是一个整型变量的长度,地址值一般没有负数所以准确的说指针变量的类型应该是unsigned int 即每个指针变量占4个字节。还记得在定义结构体中可以使用该结构体的指针作为成员,但是不能使用该结构的实例作为成员吗?这是因为编译器需要根据各个成员变量的大小分配相关的内存,用该结构体的实例作为成员时,该结构体根本没有定义完整,编译器是不会知道该如何分配内存的,而任何类型的指针都只占4个字节,编译器自然知道如何分配内存。我们在书写指针变量时给定的类型是它所指向的变量的类型