指针

指针函数和函数指针

前提是你 提交于 2020-01-28 16:50:46
指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。 函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。 int * fun ( int x , int y ) ; //指针函数 int ( * fun ) ( int x , int y ) ; //函数指针 来源: CSDN 作者: 蒋文韬 链接: https://blog.csdn.net/qq_34591581/article/details/104100252

LeetCode 141 Linked List Cycle(set、map、快慢指针)

大城市里の小女人 提交于 2020-01-28 15:25:28
题目链接: 点击这里 不带头节点。 set判重: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head ) { unordered_set < ListNode * > st ; while ( head != NULL ) { if ( st . count ( head ) ) return true ; st . insert ( head ) ; head = head - > next ; } return false ; } } ; map: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : bool hasCycle ( ListNode * head )

剑指offer:反转链表

做~自己de王妃 提交于 2020-01-28 14:02:25
一、题目描述   输入一个链表,反转链表后,输出新链表的表头。 二、思路   使用迭代的思想,从前往后遍历链表。定义三个指针,分别指向三个相邻的结点。反转前两个节点,然后将三个指针依次后移。直到第二个指针为空。最后再处理链表头尾结点。    三、代码 public class 反转链表 { public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode ReverseList(ListNode head) { if(head==null||head.next==null){ return head; } else{ ListNode p1 = head; ListNode p2 = p1.next; ListNode p3 = p2.next; while(p2!=null){ p3 = p2.next; p2.next = p1; //第二个结点指向第一个结点进行反转 p1 = p2; //第一个结点后移 p2 = p3; //第二个结点后移 } head.next = null; head = p1; return head; } } }    来源: https://www.cnblogs.com

结对编程

一个人想着一个人 提交于 2020-01-28 13:14:19
简介 对伙伴的代码进行审查 合作伙伴: 尉安瑞 伙伴 Coding 参考文章: 谷歌是如何做代码审查的 C++代码审---参考林锐高质量C/C ++ 整天说Code Review重要,你知道应该关注哪些关键点吗? - CSDN博客 一.代码审查表分析 功能模块名称 无环图应用 审查人 Stone 审查日期 2018.4.4  代码名称 DYJ  代码作者 尉安瑞  文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 是    头文件和定义文件的目录结构是否合理? 是    版权和版本声明是否完整? 是  重要 头文件是否使用了 ifndef/define/endif 预处理块? 无  无  头文件中是否只存放“声明”而不存放“定义” 无        程序的版式 重要性 审查项 结论   空行是否得体? 否    代码行内的空格是否得体? 否    长行拆分是否得体? 是    “{” 和 “}” 是否各占一行并且对齐于同一列? 否  重要 一行代码是否只做一件事?如只定义一个变量,只写一条语句。 否  重要 If、for、while、do等语句自占一行,不论执行语句多少都要加 “{}”。 否  重要 在定义变量(或参数)时,是否将修饰符 * 和 & 紧靠变量名?注释是否清晰并且必要? 否  重要 注释是否有错误或者可能导致误解? 无  重要 类结构的public,

55-链表中环的入口节点

你。 提交于 2020-01-28 12:50:50
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程) 当快慢指针相遇的时候: 此时慢指针走的路程为Sslow = x + m * c + a 快指针走的路程为Sfast = x + n * c + a 2 Sslow = Sfast 2 * ( x + m*c + a ) = (x + n *c + a) 从而可以推导出: x = (n - 2 * m )*c - a = (n - 2 *m -1 )*c + c - a 即环前面的路程 = 数个环的长度(为可能为0) + c - a 什么是c - a?这是相遇点后,环后面部分的路程。(橙色路程) 所以,我们可以让一个指针从起点A开始走,让一个指针从相遇点B开始继续往后走, 2个指针速度一样,那么,当从原点的指针走到环入口点的时候(此时刚好走了x) 从相遇点开始走的那个指针也一定刚好到达环入口点。 所以2者会相遇,且恰好相遇在环的入口点。 最后,判断是否有环,且找环的算法复杂度为: 时间复杂度:O(n) 空间复杂度:O(1) /*function ListNode(x){ this.val = x; this.next = null; }*/ function EntryNodeOfLoop

微软向开源又迈进了一大步:Checked C

假装没事ソ 提交于 2020-01-28 11:31:03
导读 微软开源了 Checked C ,这是一个 C 语言的扩展版本,可以用于解决 C 语言中的一系列安全相关的隐患。正如其名字所示,Checked C 为 C 语言增加了检查,这个检查可以帮助开发者检查常见的编程错误,比如缓存区侵占buffer overruns、内存访问越界、不正确的类型转换等。这些编程错误往往是造成许多重大安全漏洞的根本原因,比如破壳漏洞Shellshock、心脏出血漏洞Heartbleed、沙虫Sandworm等。 Checked C 通过修改控制指针来解决这些问题,指针被程序员们用来定义他们的代码所操作的内存地址。当指针数量一多,指针控制就往往容易忙中出乱,项目越大跟踪它们就越困难,类似 Chromium、Firefox、Office、OpenSSL 以及其它的大型代码库在这方面都存在这样的问题,你可以从它们的变更日志中看到大量的这类问题修复。“Checked C 允许程序员更好的描述他们想要如何使用指针,以及指针应该指向的内存范围”,微软说,“这个信息可以用于在运行时环境中添加检测,以侦测错误的数据访问,而不是让错误悄悄的发生而无所察觉。” Checked C 也将允许开发者检测到他们以为 C 语言有、而实际却没有的功能误用。按编程界的说法来讲,这个叫做“边界检查bounds checking”的功能,用于检查变量/指针是否在它的范围之内赋值,C# 和

C++ primer 笔记(一)

。_饼干妹妹 提交于 2020-01-28 08:22:47
第1章 >> << 输入输出操作符返回 输出流std::cin, std::cout本身 endl输出换行,刷新与设备关联的buffer augument 实参 paremeter 形参 buit-in type 内置类型 manipulator 操纵符 第2章 C++是静态类型语言,编译时执行类型检查 wchar_t =L'a' 16位 float 6位有效数字 double 至少10位有效数字 long double 至少10位有效数字 赋值:对于unsigned越界赋值,结果等于该值对unsigned可能取值个数求模 例如:unsigned char c=336; //实际c=336%256=80 unsigned char c=-1; //实际c=-1%256=255 对于signed越界赋值,由编译器决定实际值 初始化不是赋值,初始化指创建变量并赋值,赋值是擦出当前值赋新值 内置类型初始化:在函数体外定义的变量初始化为0,函数体内定义的不自动初始化。 定义:分配存储空间,还可以指定初值 声明:向程序表明变量的类型,名字 extern声明:当有初始化式时则为定义 非const变量默认为extern,要使const变量能在其他文件中访问,则需显式指定为extern。const默认为定义它的文件的局部变量。 引用必须在定义时初始化,引用一经初始化,就始终指向同一个特定对象。

详解c++指针的指针和指针的引用

自古美人都是妖i 提交于 2020-01-28 05:04:49
展示一下使用指针的指针和指针的引用修改传递给方法的指针,以便更好的使用它。(这里说的指针的指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。 如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值。我们用下边的代码说明一下问题: int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0; } 看一下输出结果 输出的是两个2 使用指针的指针 展示一下使用指针的指针做为参数 void func(int **p) { *p = &m_value; // 也可以根据你的需求分配内存 *p = new int; **p = 5; } int main(int argc, char *argv[]) { int n = 2; int *pn = &n; cout << *pn << endl; func(&pn); cout << *pn <<endl

c++指针作为形参常见问题--1

邮差的信 提交于 2020-01-28 03:45:53
【错误案例1】 错误原因,函数createCharLink中定义的指针p虽然是在堆上申请的内存空间,但是函数createCharLink没有返回值,所以main函数中的指针p未定义,因此编译未通过。解决办法是,把指针p的声明放在main函数体外,紧跟结构体charlink的定义之后,并且仅仅在createCharLink函数中定义它。或者,把createCharLink更改为返回值为CharLink *类型的函数。 #include<iostream> #include<cstddef> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; typedef struct charlink { char ch; struct charlink *next; }CharLink; //CharLink *p; //在此处,取消注释这一句 void createCharLink(const char *str1) { CharLink *p = (CharLink*)malloc(sizeof(CharLink)); //删除或者注释掉这一句 // p = (CharLink*)malloc(sizeof(CharLink)); //修改办法,取消注释这一句 p->next=0; while(

C/C++ 函数指针做函数参数思想剖析

天大地大妈咪最大 提交于 2020-01-28 01:51:01
图解: 代码实现 # include <iostream> using namespace std ; int myAdd ( int a , int b ) { printf ( "myAdd : %d\n" , a + b ) ; return a + b ; } int myMulti ( int a , int b ) { printf ( "myMulti : %d\n" , a * b ) ; return a * b ; } int myAdd3 ( int a , int b ) { printf ( "myAdd3 : %d\n" , a + b ) ; return a + b ; } int myAdd4 ( int a , int b ) { printf ( "myAdd4 : %d\n" , a + b ) ; return a + b ; } typedef int ( * myFuncPointerType ) ( int a , int b ) ; int MainOp ( myFuncPointerType myFuncAdd ) { int c = myFuncAdd ( 5 , 6 ) ; //间接调用 return c ; } int main ( ) { MainOp ( myAdd ) ; MainOp ( myMulti ) ;