00:00 / 03:05
连播
清屏
智能
倍速
点赞812
00:00 / 03:05
连播
清屏
智能
倍速
点赞686
00:00 / 00:50
连播
清屏
智能
倍速
点赞349
00:00 / 02:32
连播
清屏
智能
倍速
点赞438
00:00 / 01:29
连播
清屏
智能
倍速
点赞99
这是个啥!这个表达式原来是这个意思! 这段代码恐怕会让每个程序员都不寒而栗, (*(void(*)())0)() 今天我就带大家来一步一步的把这段代码给拆解明白! 先来看看这段代码 float f,g;这段代码大家都知道就是声明了两个浮点类型的变量 f g 当然我也可以写成这样 (flaot (f)): 这段代码还是声明了一个浮点类型的变量f,你即便是在外面加一百个括号也不影响它的本质。 同样再看看这段代码 flaot ff();ff是一个返回值为浮点类型的函数。 还有类似的 float *pf;这段代码指的是 pf是一个指向浮点类型的指针。 以上的这些形式可以组装成这样! flaot *g(),(*h)(); 注意这两个表示的函数含义不一样! g是一个函数,该函数的返回值为指向浮点类型的指针。 而h是一个函数指针,指向一个返回值为浮点类型的函数。 为什么会这样?因为小括号的优先级高于*。 然后我们再把末尾的分号和变量名去掉,再加上括号就变成了这样 (flaot (*)()) 这段代码的意思就是一个“指向返回值为浮点类型的函数的指针”的类型。 我在把它他改成这样 (void(*)()),这段代码的意思就是“指向返回值为void类型的函数指针”的类型 有了这些的预备知识再来看这段代码 (*(void(*)())0)() 我们分两步来分析这段代码 第一步:(flaot)0,这段代码的意思就是把数字0转成浮点类型。 接下来我直接把flaot替换成这个“指向返回值为void类型的函数指针 (void (*)())0,它的意思就是把0强转成“指向返回值为void类型的函数指针” 第二步:(*fp)();fp是一个函数指针,我们要调用函数要写成这样。 接下来我们直接把fp替换成替换成上面的这个类型就得到了这个表达式 (*(void(*)())0)(),所以这段代码的含义就是调用“返回值为void类型的函数指针”的函数。 真恶心她妈给恶心开门,恶心到家了。 #c语言 #c语言专升本 #指针函数 #函数指针 #指针
00:00 / 02:00
连播
清屏
智能
倍速
点赞182
00:00 / 00:54
连播
清屏
智能
倍速
点赞60
00:00 / 00:42
连播
清屏
智能
倍速
点赞31
00:00 / 02:01
连播
清屏
智能
倍速
点赞60
00:00 / 02:18
连播
清屏
智能
倍速
点赞0
00:00 / 08:53
连播
清屏
智能
倍速
点赞21
00:00 / 04:34
连播
清屏
智能
倍速
点赞33
00:00 / 00:58
连播
清屏
智能
倍速
点赞30