指针变量

leetcode 15.三数之和

﹥>﹥吖頭↗ 提交于 2020-03-04 23:04:52
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 解题思路: 三个数之和,要么是依次遍历数组三个数相加看是否等于0,但是这种方法算法复杂度等于0(n^3),有点复杂。 还有一种思路是先对数组进行一次排序,然后找一个固定值,nums[i],然后设置两个指针,left=i+1,right = nums.length -1,两个指针一起循环,如果三个数的和等于0那就存放,如果大于0,就让尾指针 right 向前走,如果小于0,就让头指针 left 向前走。(这块建议自己在纸上画一画,先对数组排序,然后固定一个值,从设置头尾指针进行遍历) var threeSum = function(nums) { //设置变量 let result = [] let left //头指针 let right //尾指针 let fixedValue //固定值 //排序 nums.sort( (a,b) => { return a-b }) //判断数组内的元素是否都大于0,或者都小于0

C语言-怎么找115资源

眉间皱痕 提交于 2020-03-04 22:21:54
C 语言的起源与发展 C 语言的开发 Dennis M. Ritchie Bell Labs/Lucent Technologies Murray Hill, NJ 07974 USA 摘要 C 编程语言是在 1970 年代早期作为初创的 Unix 操作系统的系统实现语言而设计的。起源于无类型的 BCPL 语言,它发展出了类型结构;它建立在一个小机器上、作为改善其贫乏的编程环境的工具,它现在已经成为占主导地位的语言之一。本文研讨它的演变。   注意: *Copyright 1993 Association for Computing Machinery, Inc. This electronic reprint made available by the author as a courtesy. For further publication rights contact ACM or the author. This article was presented at Second History of Programming Languages conference, Cambridge, Mass., April, 1993. It was then collected in the conference proceedings: History of Programming

Redis(2)——跳跃表

亡梦爱人 提交于 2020-03-04 22:14:26
一、跳跃表简介 跳跃表(skiplist)是一种随机化的数据结构,由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出,是一种可以与平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成,以下是一个典型的跳跃表例子: 我们在上一篇中提到了 Redis 的五种基本结构中,有一个叫做 有序列表 zset 的数据结构,它类似于 Java 中的 SortedSet 和 HashMap 的结合体,一方面它是一个 set 保证了内部 value 的唯一性,另一方面又可以给每个 value 赋予一个排序的权重值 score,来达到 排序 的目的。 它的内部实现就依赖了一种叫做 「跳跃列表」 的数据结构。 为什么使用跳跃表 首先,因为 zset 要支持随机的插入和删除,所以它 不宜使用数组来实现,关于排序问题,我们也很容易就想到 红黑树/ 平衡树 这样的树形结构,为什么 Redis 不使用这样一些结构呢? 性能考虑: 在高并发的情况下,树形结构需要执行一些类似于 rebalance 这样的可能涉及整棵树的操作,相对来说跳跃表的变化只涉及局部 (下面详细说); 实现考虑: 在复杂度与红黑树相同的情况下,跳跃表实现起来更简单,看起来也更加直观; 基于以上的一些考虑

malloc

半世苍凉 提交于 2020-03-04 08:16:13
malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。中文为动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。 malloc函数原型 extern void *malloc(unsigned int num_bytes); malloc函数头文件 #include <stdlib.h> 或 #include <malloc.h> malloc函数函数声明 void *malloc(size_t size); void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据。 malloc函数返回值 如果分配 成功 则返回 指向被分配内存的指针 (此存储区中的初始值不确定), 失败 返回 空指针NULL 。当内存不再使用时,应使用 free()函数 将内存块释放。 malloc函数与new的区别 从本质上来说: malloc ( Linux上具体实现可以参考man malloc,glibc通过brk()&mmap()实现 )是libc里面实现的 一个函数 。 如果在source code中没有直接或者间接include<stdlib.h>,那么gcc就会报出error:‘malloc’ was not

char *p;sizeof(p)=?

一世执手 提交于 2020-03-04 07:51:25
sizeof(指针)是指针变量占用内存的大小(字节数),而指针是存储变量地址的,变量地址的长度即为指针变量所占内存大小,尽管不同类型变量所占内存大小不同(int四字节、char一字节),但指针存的只是首字节地址,不同的是指针递增时,增加的地址。 所以在32位机上,所有指针类型变量占用内存字节数都为4 因为32位机就是 4字节 * 8个二进制位/字节 计算出来的. 如果在64位机上,指针占用内存大小就是8个字节. 也有一种说法,指针是存变量地址,变量地址的长度与编译时使用的编译器有关,一般VS是win32,即32位,所以指针长度一般位4字节(4*8) # include <iostream> using namespace std ; int main ( ) { char c ; char * pc = & c ; int a ; int * pa = & a ; cout << sizeof ( c ) << "\t" << sizeof ( pc ) << "\t" << ( void * ) pc << "\t" ; pc ++ ; cout << ( void * ) pc << endl ; cout << sizeof ( a ) << "\t" << sizeof ( pa ) << "\t" << pa << "\t" << pa ++ << endl ;

第六周作业

♀尐吖头ヾ 提交于 2020-03-04 07:25:42
这次作业属于那个课程 C语言程序设计 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2889 我在这个课程的目标是 理解变量、内存单元和地址之间的关系;掌握如何使用指针变量;掌握指针变量的基本运算;理解指针作为函数参数的作用;掌握如何使用指针实现函数调用返回多个值 这个作业在那个具体方面帮助我实现目标 正确使用字符串 参考文献 C语言程序设计 一、本周完成的作业: 求两数平方根之和 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double *a, double *b); 其中 a 和 b 是用户传入的参数。函数求 a 指针和 b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: #include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0;

函数指针和指针函数的区别

我与影子孤独终老i 提交于 2020-03-04 06:14:08
一、【 函数指针 】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用 指针变量 指向数组的首地址,也可以使用 指针变量 指向函数代码的首地址,指向函数代码首地址的 指针变量 称为 函数指针 。 1、函数指针定义 函数类型(*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。 例如: int (*f)(int x); double (*ptr)(double x); 在定义函数指针时请注意: 函数指针和它指向的函数的参数个数和类型都应该是—致的 ; 函数指针的类型和函数的返回值类型也必须是一致的。 2、函数指针的赋值 int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。 二、【 指针函数 】 一个函数不仅可以带回一个 整型数据 的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。 返回指针的函数,一般定义格式为:

5/27 C语言 指针系列

时间秒杀一切 提交于 2020-03-03 21:07:09
1、序。数据在内存中是如何存储的,又是如何读取的? 在程序中定义一个变量,在对程序进行编译的时候,系统会给这个变量分配内存单元。编译系统根据程序中定义变量类型,分配一定长度的空间。 2、指针。 地址指向该变量的单元,地址指向该变量的单元,将地址形象化称作为指针,就是通过它能够找到以他为地址的内存单元。 3、访问。 访问分为直接访问和间接访问,直接访问是直接读取一个数据的地址,间接访问是通过中介访问自己的数据的地址,一般要进行两步以上。 4、指向。 一个变量的地址称为变量的指针,指针是通过地址来体现的。假设i_pointer中的值是变量i的地址的变量(2000),这样就在i—pointer和变量i中建议一种联系,通过i—pointer就知道i的地址,从而找到i的内存单元 来源: https://www.cnblogs.com/serious123/p/10934385.html

# 指针

不打扰是莪最后的温柔 提交于 2020-03-03 21:00:08
指针 http://c.biancheng.net/cpp/biancheng/view/173.html 指针是一种数据类型。被之前的错误写法误导了,以后从int *p改写成int* p;未初始化的指针地址为NULL,输出即为0; 类似于int p;//int 是一种数据类型,p是该类型的变量,P所占的空间大小是平台相关的,一般编译环境中 sizeof(p) == 4。 int* p=&var;//int*是一种数据类型(指向整数的指针类型),p 是该类型的变量,&i是赋与p的值(一个地址)p所占的空间大小是平台相关的,一般32位编译环境中 sizeof(p)==4,一般64位编译环境中 sizeof(p) == 8。 &i 是对 i 取址,生成一个 int* 类型、指向 i 的指针。 *p和var指的是var的内容;p和&var指的是var的地址 //*称为对指针的解引用,"*"的作用是引用指针指向的变量值,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。也就是说,解引用是返回内存地址中保存的值。 来源: https://www.cnblogs.com/sstealer/p/11331462.html

const关键字与指针

ぐ巨炮叔叔 提交于 2020-03-03 20:58:31
const关键字与指针 1、const关键字,在C语言中用来修饰变量,表示这个变量是常量。 2、const修饰指针有4种形式, 第一种:const int *p1; //p本身不是const的,而p指向的变量是const的 *p1 = 3;//错误的,const变量不能修改 p1 = 3; //正确的 第二种:int const *p2; //p本身不是const的,而p指向的变量是const的 *p2 = 3;//错误的,const变量不能修改 p2 = 3; //正确的 第三种:int * const p3; //p本身是const的,而p指向的变量不是const的 *p3 = 3;//正确的 p3 = 3; //错误的,const变量不能修改 第四种:const int * const p4; //p本身是const的,而p指向的变量是const的 *p4 = 3;//正确的 p4 = 3; //正确的 3、关于指针变量的理解,主要是涉及到两个变量:第一个是指针变量p本身,第二个是p指向的那个变量。一个const 只能修饰其中一个变量。 4、const在实际使用过程中,并不是一定不能被修改,通过一些特定的方法(比如说是指针)也是可以被修改掉的。 只是大部分情况下,我们既然定义了const类型的变量,就不会去修改这个变量。所以指针使用的时候,一定要谨 慎