🌓

C语言的函数指针

有人说 自己已经「学完C语言」 我就顺手写了一个东西 问他什么意思 明显嘛 看不懂

东西是这个 比我当时写的又加了一个括号 注意这个是可以编译通过的

1
int (*a[1])(void (*a[2])(int (*a)[3]));

我来简单解释一下 顺便传授一下方法

首先 这个是C语言里面定义函数指针的语法 难点是 因为函数有参数 而参数的类型也必须写在里面 所以会非常长 道行浅的「学完C语言」的人基本上是看不出来的 其实很简单 首先抓住主要矛盾 这个是什么 从前往后 从外往里找最合法的部分 发现是这个

1
int (*a[1])(...)

去掉[1]就是函数指针 这里加上[1]是函数指针的数组 所以 变量a是有一个元素的函数指针的数组 每个元素都是一个函数指针 这个函数的返回值是int

再看里面 也是一个函数指针的数组 这个是作为参数的

1
void (*a[2])(int (*a)[3])

类似的 这是有两个元素的函数指针的数组 每个元素都是一个函数指针 函数指针指向的函数的返回值是void 接受一个参数 这个参数是一个指向了有3个元素的数组 数组的类型是int

阅读全文

DPI和页面缩放的关系

写在前面的话

这个问题我六年前就注意到了 但直到今天才完全搞明白 一个人一生中能有几个六年啊 如果你也不知道这个问题 我希望你不会像我一样花六年时间才搞明白 因为你看了我写的东西就明白了

用了六年才想明白的问题

屏幕的实际DPI和设定值不一致的情况下 显示内容的大小是不正确的 比如一张A4的纸 在屏幕上的大小和实际纸的大小不一样 如果要变成一样的需要对屏幕显示的内容进行缩放 缩放的比例是(实际DPI/设定DPI) × 100%

比如 我的屏幕的实际DPI128 而由于各种原因 我用的Windows的DPI是默认值96 所以 如果要在我的屏幕上正确显示和实际大小一样的东西 需要对其进行(128/96) × 100% = 133%的缩放

阅读全文

「我认Sóng」 这个Sóng字应该怎么打

一般都打怂恿的「怂」,其实是错误的(详细的考据请见《怂不读 sóng!》,作者考据功力颇深,李菊福)。

正确的是「㞞」(CJK IDEOGRAPH-379E),简化字的形式是「𪨊」(CJK IDEOGRAPH-2AA0A),可惜这个字很多字体里是没有的,因为它属于扩展区。

阅读全文

王子猷的故事

王子猷作桓车骑骑兵参军。桓问曰:「卿何署?」答曰:「不知何署,时见牵马来,似是马曹。」桓又问:「官有几马?」答曰:「不问马,何由知其数!」又问:「马比死多少?」答曰:「未知生,焉知死!」

《世说新语·简傲》

阅读全文

大于等于号和小于等于号的字型

前言

大于等于号和小于等于号对应的Unicode符号是(GREATER-THAN OR EQUAL TO)和(LESS-THAN OR EQUAL TO) 最近对这两个符号有一些困惑 先总结出来

SLANTED?

先科普一下:

在字体里面slanted表示倾斜 但它和italic不一样 前者只是倾斜 而后者不仅倾斜 风格也变了 一般来说 无衬线字体(好比是中文的黑体 具体看维基百科的相关词条)如果有斜体算是slanted 衬线字体(好比是中文的宋体楷体 维基词条)一般是italic 大多数情况下这种区分没有什么意义 只有数学相关的字体才会有slanted

我最近发现 原来大于等于号和小于等于号除了我熟悉的两个外 还有下面的两个

(GREATER-THAN OR SLANTED EQUAL TO)和(LESS-THAN OR SLANTED EQUAL TO)

它们的区别是什么呢?从字体角度讲 最明显的区别就是字型的不同

阅读全文

Emacs里用正则表达式匹配中文

这是个非常好用的功能 也是其他正则表达式里面不具备或不能优雅实现的(比如有些地方用[\u4e00-\u9fa5]来匹配中文 你觉得你能记住么)

但就这个方便的功能我也记不住 而且手册也看不大懂

正确写法:

Emacs里正则匹配中文的写法是\cc

手册里面是这么说的

‘\cC’
matches any character that belongs to the category C. For example,
‘\cc’ matches Chinese characters, ‘\cg’ matches Greek characters,
etc. For the description of the known categories, type ‘M-x
describe-categories RET’.

‘\CC’
matches any character that does not belong to category C.

15.7 Backslash in Regular Expressions

阅读全文

Emacs实现按一下按两下功能不同的写法

有人问 如何在Emacs里实现按一下按两下执行的功能不一样呢 当时我没电脑所以没有写 今天有时间 写一下

其实很简单 如果上一个命令和这一个命令是一样的 那么就是按两下了 不过还不够好 因为后面都认为是按两下 所以其实是「按一下」和「按多下」 例子是下面的样子

1
2
3
4
5
6
7
(defun my-repeat ()
"Repeat function demo."
(interactive (if (equal last-command this-command)
(insert "摁了两下\n")
(insert "摁了一下\n"))))

(local-set-key [f9] (quote my-repeat))

阅读全文

Emacs在保存文件时进行diff

Emacs保存文件的快捷键是C-x C-s 对应的函数是save-buffer 功能就是保存 比较单纯

但其实还有一个save-some-buffers 绑定在C-x s 会保存修改过的文件 因为需要确认是否保存 我用的不多 但它有个好处 就是可以在保存文件前diff 这样会很安全 我印象中Debian在修改配置的时候会用diff让用户确认修改的内容 都是为了安全罢

阅读全文

实用排版技术

楔子

有一天查资料,偶然发现的这个网站,更确切的说是一本网页形式的书,书名是Practical Typography,网址是这个:

http://practicaltypography.com/

内容很多,相关的学习心得陆续整理到这里。

阅读全文

软换行

https://www.cs.tut.fi/~jkorpela/shy.html

Update:

原来这个网站里面还有不少好东西 可以慢慢看看

阅读全文