C语言指针是难点,是必须要攻克的堡垒。
看C语言的资料,指针是绕不过去的,这里记录自己对指针的理解。
一、感性认识指针。
0、有如下C代码,存为point.c文件
#include <stdio.h> int main() { int num = 1; int *point; point = # // %p表示输出地址 printf("&num = %p | point = %p | *point = %d \n", &num, point, *point); }
C语言指针是难点,是必须要攻克的堡垒。
看C语言的资料,指针是绕不过去的,这里记录自己对指针的理解。
一、感性认识指针。
0、有如下C代码,存为point.c文件
#include <stdio.h> int main() { int num = 1; int *point; point = # // %p表示输出地址 printf("&num = %p | point = %p | *point = %d \n", &num, point, *point); }
shell中(version >= 4.1.2)也存在关联数组(associated array),跟PHP的关联数据很像。
查看shell版本
bash -version GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
看C语言经典教材《C程序设计语言》中,Linux下编译C代码用的是cc, 广为人知的C编译器的gcc, 还有CC、g++那么有啥差异呢
一、cc是Unix下C语言编译器,是c compiler的缩写。
cc是付费的。所以Unix的两个孩子Linux和Mac OS上的cc都是软连接。
0、Linux下(这里测试用的是Centos)
[root@izj6cfhaw27k49x8usszs3z ~]# which cc /usr/bin/cc [root@izj6cfhaw27k49x8usszs3z ~]# ls -l /usr/bin/cc lrwxrwxrwx 1 root root 3 Jul 22 2018 /usr/bin/cc -> gcc [root@izj6cfhaw27k49x8usszs3z ~]# which gcc /usr/bin/gcc
可见,cc是gcc的软连接
继续阅读
最近碰到了一个问题,PHP中如何遍历对象(迭代对象)。
第一部分 遍历对象
一、问题描述
我们知道foreach可以遍历数组,也可以遍历对象,但是默认情况下只能遍历对象public属性。
class User { public $name = 'salmonl'; private $sex = 'm'; private $age = 30; public static function getAge() { return $this->age; } } $user = new User(); var_dump($user); foreach ($user as $key => $value) { echo $key, '==>', $value, PHP_EOL; }
前台图片上传
比较普遍用这种方式,页面通过form表单来提交,服务端PHP通过$_FILES来接收
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> 图片:<input type="file" name="img"/> <input type="submit" value="点击上传"/> </form> </body> </html>
我们知道form表单默认是通过application/x-www-urlencoded方式编码传递的。以上form表单指定了通过multipart/form-data的编码方式,支持二进制传输。
那么服务端如果想调用公司平台接口上传呢,下来将进行介绍
继续阅读
PHP生成二维码
最近做页面保存长图的功能,长图底部需要附带页面地址二维码,之前没搞过二维码相关的实现,在Google上搜索一番,发现了两个现有的轮子phpqrcode扩展和qr-code扩展。
对比发现phpqrcode很多年没有维护了,最终选择了qr-code。
注:如果使用phpqrcode可以参考PHP基于phpqrcode类生成二维码
一、什么是堆
堆是一种数据结构,特殊的树形数据结构。常见的堆有二叉堆、二项式堆、斐波拉契堆等。
堆这种数据结构主要用来实现两个功能:堆排序和优先队列。
PHP SPL中有堆这种数据结构(SplHeap),及优先队列(SplPriorityQueue)。
二、细说二叉堆
这里细说的堆排序使用的是二叉堆,那么二叉堆是什么样的呢
二叉堆是一颗完全二叉树(维基百科提到还有可能是近似完全二叉树,很不理解),节点和双亲节点维持着固定的关系,要么节点的值都大于双亲节点,要么节点的值都小于双亲节点,并且每个节点的左右子树都是二叉堆。【完全二叉树及堆的图,可参考知乎专栏,传送门】
特点:
0、节点都大于双亲节点的二叉堆叫大顶堆。
1、节点都小于双亲节点的二叉堆叫小顶堆。
2、二叉堆一般用一维数组来存储。
3、二叉堆一个节点的左右孩子没有顺序。
4、有n个元素的二叉堆,最后一个非叶节点为n/2 -1
继续阅读
最近这一两年,长图分享突然悄无声息的兴起了。刚在产品上增加了这一功能,发现确实是一种极好的分享传播方式。
生成的效果图太长,下拉在文末可以查看到
结合之前的调研,以及尝试走不通的路,以下整理了这个功能点相关的方案,希望提供你有用的参考。
继续阅读
提到敏感词过滤,经过简单思考,你没有想到Trie的话,那么你就不要思考了,这篇文章很适合你。如果你想到了,这篇文章也不失一篇很好的参考。
有经验的开发者都会说到用字典树来实现敏感词检测过滤等功能,字典树即本文所谈论的对象Trie。
他的别名除了字典树,还有很多:前缀树、单词查找树、键树。跟很多人一样,我也格外喜欢前缀树(Prefix Tree)这个昵称。
继续阅读
算法:
* 0、构建Trie树
* 1、遍历目标字符串中的每一个字符,如果字符不存在,继续下一个。
* 2、如果字符存在,从该字符下一个字符开始遍历,匹配成功后直接返回匹配字符长度,然后跳过这个长度并不是+1, 算是优化了【匹配到一个词后直接返回,没有往下找最长】,否则回到第1步
* 3、重复1-2
继续阅读