相关疑难解决方法(0)

这段代码的含义是什么?void(*signal(int sig,void(*func)(int)))(int);

我遇到了这段代码,完全迷失了解释它的含义.

#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
Run Code Online (Sandbox Code Playgroud)

第2行代码的详细解释是什么?

我知道void并且int是类型,*func是函数的指针,括号是优先级.但是我仍然没有把(*信号......),(int)和整个事物结合在一起.越详细越好.

可能我已经知道这个宣言的意义/效果了.但我不得不做一些试验来帮助我了解正在发生的事情,如下所示:

  1 #include <signal.h>
  2 void (*signal)(int sig, void (*func)(int));
  3 void (*signal)(int);  // then void (signal)(int) again.
  4 //void (*signal(int sig, void (*func)(int)))(int); //break this line into two lines above
  5
  6 int main(){}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我void (*signal(int sig, void (*func)(int)))(int)分成了两行.对于3号线,我都尝试void (*signal)(int)void (signal)(int),与表明我试图重新声明同样的错误的结果signal:

TestDeclaration.c:2:错误:'signal'重新声明为不同类型的符号/usr/include/signal.h:93:错误:先前'signal'的声明在这里
TestDeclaration.c:3:错误:'signal'重新声明作为不同类型的符号/usr/include/signal.h:93:错误:之前的'信号'声明就在这里

现在我知道两种审判都是不正确的申报方式,但为什么它们不正确呢?为什么声明的原始方式不是重新声明?

c

34
推荐指数
2
解决办法
7067
查看次数

如何在模板化的函数指针声明中读取这么多的星星和括号?

简介到C++ 11特性:尾随返回类型

文章声称

template <class T> class tmp {
public:
    int i;
};

auto foo()->auto(*)()->tmp<int>(*)(){
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

相当于

template <class T> class tmp{
public:
    int i;
};

tmp<int> (*(*foo())())() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不理解第二个代码示例中的复杂函数.我应该在一开始看哪里?我想是的foo.但旁边的统计数据foo将定义foo为指针......基于第一个代码示例,我将把这个片段转换为

tmp<int> (*)() (*)() foo(){ return 0;}
Run Code Online (Sandbox Code Playgroud)

所以foo是一个函数,返回0,但返回类型很棘手:它的返回类型是函数指针,其返回类型又是返回类型为的函数指针tmp<int>.

c++ function-pointers declaration c++11

11
推荐指数
4
解决办法
1228
查看次数

表达式c

所以我有以下表达式

int *(*table())[30];
Run Code Online (Sandbox Code Playgroud)

在我看来table()返回一个值,该值指向指针数组的开头,每个元素指向一个整数.

你怎么看?

谢谢.

c pointers function

0
推荐指数
1
解决办法
139
查看次数

标签 统计

c ×2

c++ ×1

c++11 ×1

declaration ×1

function ×1

function-pointers ×1

pointers ×1