相关疑难解决方法(0)

C不是那么难:void(*(*f [])())()

我今天刚看了一张照片,觉得我很感激解释.所以这是图片:

一些c代码

我发现这令人困惑,并想知道这些代码是否实用.我用Google搜索了这张照片,并在 reddit条目中找到了另一张照片,是照片:

一些有趣的解释

那么"螺旋式阅读"是有效的吗?这是C编译器解析的方式吗?
如果对这个奇怪的代码有更简单的解释,那就太好了.
除此之外,这些代码是否有用?如果是这样,何时何地?

一个关于"螺旋规则"的问题,但我不只是询问它是如何应用的,或者是如何用该规则读取表达式的.我也质疑这种表达方式的使用和螺旋规则的有效性.关于这些,已经发布了一些很好的答案.

c parsing pointers function-pointers void-pointers

184
推荐指数
10
解决办法
1万
查看次数

你怎么读C声明?

我听说过一些方法,但都没有卡住.我个人试图避免C中的复杂类型,并尝试将它们分解为组件typedef.

我现在面临着从一个所谓的"三星级程序员"维护一些遗留代码的问题,而且我很难阅读一些***代码[] [].

你如何阅读复杂的C声明?

c typedef cdecl

42
推荐指数
4
解决办法
6514
查看次数

返回函数指针的函数的C语法

考虑以下typedef:

typedef int (*f1)(float);
typedef f1 (*f2)(double);
typedef f2 (*f3)(int);
Run Code Online (Sandbox Code Playgroud)

f2是一个返回函数指针的函数.与...相同f3,但函数的类型,f3返回的指针是f2.如何在f3没有typedef的情况下定义?我知道typedef是更清晰,更容易理解的定义方式f3.但是,我的目的是更好地理解C语法.

c function-pointers

35
推荐指数
5
解决办法
2万
查看次数

关于声明的螺旋规则 - 何时出错?

我最近学习用于去复制复杂声明的螺旋规则,它必须用一系列typedef编写.但是,以下评论警告我:

经常引用的简化,仅适用于少数简单案例.

我找不到void (*signal(int, void (*fp)(int)))(int);"简单的案例".顺便说一句,哪个更令人担忧.

所以,我的问题是,在哪种情况下,我应用规则是正确的,哪些是错误的?

c declaration

14
推荐指数
4
解决办法
4038
查看次数

在c中写一个函数指针

我最近在读代码,发现函数指针写成:

int (*fn_pointer ( this_args ))( this_args )
Run Code Online (Sandbox Code Playgroud)

我经常会遇到这样的函数指针:

return_type (*fn_pointer ) (arguments);
Run Code Online (Sandbox Code Playgroud)

这里讨论类似的事情:

// this is a function called functionFactory which receives parameter n
// and returns a pointer to another function which receives two ints
// and it returns another int
int (*functionFactory(int n))(int, int) {
printf("Got parameter %d", n);
int (*functionPtr)(int,int) = &addInt;
return functionPtr;
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我有什么区别,这是如何工作的?

c function-pointers function

5
推荐指数
1
解决办法
242
查看次数