指针

虚拟机的共享文件夹设置

有些话、适合烂在心里 提交于 2020-01-27 04:30:10
文章目录 .c文件的编译和执行 共享文件夹 进阶 基本数据类型 内存占用和sizeof 全局变量 局部变量和全局变量的对比 常量 枚举常量 多文件 头文件 指针 指针与++-- .c文件的编译和执行 编译 gcc -o 生成文件名 .c文件名 gcc .c文件名 -o 生成文件名 使用-o选项就可以生成指定名称的可执行文件 gcc .c文件名 默认生成一个a.out的文件 执行 ./可执行文件 共享文件夹 一般使用Windows编辑源代码,使用Linux进行编译和执行,这时候就要进行交互 如何进行交互? 使用网络,smb服务器(现在不怎么常用) 使用共享文件夹 共享文件夹的创建 首先要安装增强功能 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekFeqHfd-1577786732784)(en-resource://database/8838:1)] 安装总是无法发送虚拟光驱……到虚拟电脑? 这个时候要弹出光驱然后再次点击安装增强功能就OK了 如何弹出?(19的在没有虚拟光驱的图标,所以要这样做) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnV2Vyp7-1577786732786)(en-resource://database/8840:1)] 那个移除虚拟盘就是,不过要先勾选上Ubuntu…

探秘C++机制的实现

好久不见. 提交于 2020-01-27 02:57:08
我曾经自学过C++,现在回想起来,当时是什么都不懂。说不上能使用C++,倒是被C++牵着鼻子走了。高中搞NOIP并不允许使用STL库,比赛中C++面向对象的机制基本没有什么用武之地,所以高中搞NOIP名为用C++,其实就是c加上了cout和cin。 前几天看韩老师的《老码识途》,里面记录了一些C++面向对象机制的探索,又勾起了我的兴趣。而这个学期自学了汇编,又给了我自己动手探索提供了能力基础,自己上手以后,从一个更加底层的视角看C++机制的实现,让我在黑暗中摸到了驯服C++的缰绳。 引用: 本质上是指针,这一点即使大家没有看反汇编应该也是猜到了。 对象在内存上的布局: 1: class Father 2: { 3: int iA_; 4: int iB_; 5: 6: void FuncA(); 7: void FuncB(); 8: }; 9: 10: class Child : Father 11: { 12: int iC_; 13: void FuncC(); 14: }; 一个Father对象里只包含 (低地址 –> 高地址) : iA_,iB_。也就是一个Father对象的大小是8个字节,函数并不会占用内存空间。 为什么不会? 其实类的成员函数可以看做本质上与普通函数相同。 编译器在编译的时候就知道函数的位置,所以调用普通函数的时候会直接 call 函数地址(偏移)

delphi常用数据类型

感情迁移 提交于 2020-01-27 02:30:57
一:简单类型 包括:整形、字符型、布尔型、枚举、子界类型、实型。除实型以外,都是有序类型,即每个值在值域中都有一个序数。 1.1 整型 包括 Integer、Cardinal 、Shortint、Smallint、Longint、 Int64、Byte、 Word、Longword 以及UInt64 共 10种具体类型。 1.2 字符类型 包括 ansiChar 和 WideChar , ansiChar使用一个字节表示一个字符,WideChar则用两个字节表示一个字符。二者之间不能相互赋值。 1.3 布尔型 用于判断真假,只有 true和false 两种值。 delphi内置4中布尔类型:Boolean/ByteBool/WordBoolLongBool,内存中分别占1、1、2、4个字节。 1.4 枚举类型 type 名 = (标识符1,标识符2,标识符3.。。。); 1.5 子界类型 type 子界类型名 = 下界..上界 type TSomeInts = 1…250; //子界类型含有1~250个整数 TIntSet = set of TSomeInts; //集合TIntSet是子界类型TSomeInts的一个有限子集 1.6 实型 二:结构类型 集合、数组、记录,文件*、类*、类引用*、接口* 2.1 集合类型 type set1 = set of 有序值得集合 type

LeetCode-盛水容器问题(双指针解法)

烈酒焚心 提交于 2020-01-27 00:24:11
盛最多水的容器 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49 分析: 这里用到了双指针法,基本的表达式: area = min(height[i], height[j]) * (j - i) 使用两个指针,值小的指针向内移动,这样就减小了搜索空间,寻求更大的高值。因为面积取决于指针的距离与值小的值乘积。如果值大的值向内移动,底距离一定减小,而求面积的另外一个乘数高一定小于等于值小的值,因此面积一定减小,而我们要求最大的面积,因此值大的指针不动,而值小的指针向内移动遍历。 class Solution { public: int maxArea(vector<int>& height) { if(height.size() <= 1) return -1; int i = 0, j = height.size() - 1, res = 0; while(i < j){ int h = min(height[i],

leetcode-二叉树的中序遍历

烈酒焚心 提交于 2020-01-27 00:09:33
class Solution { private List<Integer> retlist = new LinkedList<>(); public List<Integer> inorderTraversal(TreeNode root) { //中序遍历,左臂入栈 TreeNode cur = root; Stack<TreeNode> stack = new Stack<>(); while(cur!=null || !stack.isEmpty()){ if(cur!=null){ stack.add(cur); cur = cur.left; } else{ cur = stack.pop(); retlist.add(cur.val); cur = cur.right; } } return retlist; } } 迭代写法,核心思路就是和以往只有一个stack作为判断依据不同,这次有两个判断依据TreeNode cur和stack。 如果cur不为空,加入stack,将指针指向left,如果为空pop一个,加入返回值,然后指针指向右边 来源: CSDN 作者: dogndaxiaodong 链接: https://blog.csdn.net/weixin_41327340/article/details/104089774

ca28a_demo_c++指针

岁酱吖の 提交于 2020-01-26 23:19:46
//28_CppPrimer_指针c++_txwtech /* 什么是指针,在c语言是重点,用于操作数组。c++基本不用指针,一般用vector向量操作 指针的定义和初始化,c++不会检查是否初始化 指针操作 比较复杂,需要掌握基础知识 */ //28_CppPrimer_指针c++_txwtech /* 什么是指针,在c语言是重点,用于操作数组。c++基本不用指针,一般用vector向量操作 指针的定义和初始化,c++不会检查是否初始化 指针操作 比较复杂,需要掌握基础知识 */ #include <iostream> #include <string> #include <vector> using namespace std; int main() { string s("hello world"); string *sp = &s;//指针里面保存的是地址 cout << s << endl; cout << *sp << endl;//*对sp解引用,指针所指向内存中的数据 cout << sp << endl;//sp就是地址,例如:006FF7BC vector<int> *pvec; int *ip1,*ip2; double dp, *dp2; int ival = 1024; int *pi = 0;//指针是0,表示不指向任何对象 int *pi2 =

C++基础

会有一股神秘感。 提交于 2020-01-26 23:19:36
基本数据类型 数据类型 位数 字节数 值域 signed char 8 1 -128~+127 usigned char 8 1 signed short 16 2 unsigned short 16 2 signed int 16 2 unsigned int 16 2 signed long 32 4 unsigned long 32 4 float 32 4 double 64 8 运算符 略 流程控制 if - else for 循环 while do while 指针 指针的定义: int * pl ; 指针变量的赋值 int a ; int * pl ; // *此处用作类型声明 pl = & a ; // &取地址运算符 指针的运算 int a , b ; int * pl ; // 指针类型 pl = & a ; // 取地址 a = 80 ; b = * pl ; // 取内容 int a [ 5 ] ; int * pl ; pl = & a ; // pl 为 a[0] pl = pl + 2 ; // pl 为 a[2] void指针类型 可以把任何类型的指针赋值给void 结构体 struct student { int a ; int b ; int c ; } ; struct student { . . . . . . . . . } ;s1

每天AC系列(四):四数之和

不想你离开。 提交于 2020-01-26 23:07:02
1 题目 Leetcode第18题 ,给定一个数组与一个target,找出数组中的四个数之和为target的不重复的所有四个数. 2 暴力 List<List<Integer>> result = new ArrayList<>(); if (nums.length == 4 && nums[0] + nums[1] + nums[2] + nums[3] == target) result.add(Arrays.asList(nums[0], nums[1], nums[2],nums[3])); else if (nums.length > 4) { Arrays.sort(nums); Set<List<Integer>> resultSet = new HashSet<>(); for(int i=0;i<nums.length-3;++i) { for(int j=i+1;j<nums.length-2;++j) { for(int k=j+1;k<nums.length-1;++k) { for(int m=k+1;m<nums.length;++m) { if(nums[i]+nums[j]+nums[k]+nums[m] == target) resultSet.add(Arrays.asList(nums[i],nums[j],nums[k],nums[m]));

智能指针

人盡茶涼 提交于 2020-01-26 22:31:48
内存泄露(臭名昭著的BUG) 动态申请堆空间,用完后不归还 C++语言中没有垃圾回收机制 指针无法控制所指堆空间的生命周期 我们需要什么? 需要一个特殊的指针 指针生命周期结束时主动释放堆空间 一片堆空间最多只能由一个指针标识 杜绝指针运算和指针比较(可以避免野指针) 解决方法 指针操作符(->和*) 只能通过类的成员函数重载 重载函数不能使用参数 只能定义一个重载函数 小结: 指针操作符(->和*)可以被重载 重载操作符能够使用对象代替指针 智能指针只能用于指向堆空间的内存 智能指针的意义在于最大程度的避免内存问题 智能指针使用军规:只能用来指向堆空间中的对象或者变量 #include <iostream> #include <string> using namespace std; class Test { int i; public: Test(int _val) { this->i = _val; cout << "Test(int _val)" << endl; } ~Test() { cout << "~Test()" << endl; } int get_value() { return i; } }; class Pointer { Test* mp; public: Pointer(Test *p = NULL) { mp = p; } //执行深拷贝

【AC自动机】AC自动机

帅比萌擦擦* 提交于 2020-01-26 21:20:25
Definition & Solution AC自动机是一种多模式串的字符串匹配数据结构,核心在于利用 fail 指针在失配时将节点跳转到当前节点代表字符串的最长后缀子串。 首先对 模式串 建出一棵 tire 树,考虑树上以根节点为一个端点的每条链显然都对应着某一模式串的一个前缀子串,以下以树上的每个节点来代指从根节点到该节点对应的字符串。 定义一个字符串 \(S\) 在 trie 树上“出现过”当且仅当存在一条以根节点为一个端点的链,该链的对应字符串为 \(S\) 。 考虑对每个节点求出一个 fail 指针,该指针指向在树上出现的该子串的 最长 后缀子串的端点。考虑在匹配文本串的时候,如果某一位置失配,最优的选择显然是跳转到被匹配串的最长后缀子串。因为这样所有在树上出现过的字符串都有机会被跳转到。 需要注意的是如果一个字符串匹配到了文本串,那么他的所有后缀子串都能匹配文本串。也就是说对于一个节点,他的fail,fail的fail,一直到根节点都能匹配当前文本串。 考虑求出fail指针的方法: 设根节点为空,显然根节点的所有孩子的fail指着指向根节点。 对于一个已经求出 fail 指针的节点 \(u\) ,设 \(u\) 的 fail 指向 \(w\) ,考虑 \(u\) 的一个孩子 \(v\) ,设 \(w\) 对应的孩子为 \(z\) ,且设 \(z\) 在 trie