下面的C++语句是什么意思
What does the following C++statement mean
今天在一次C++面试中看到一句话:
int (*(*fb)(int, char*))[2];
我不知道这个声明是什么意思。它看起来很像函数指针,但第一个星号和方括号破坏了一切。
Visual Studio 解码 fb
的类型如下 int[2] * (int, char *) *
,看起来还是有点神秘。
如果我们简化声明,那么一切看起来都很清楚
int(*(*fa)(int, char*));
int* func(int, char*)
{
return 0;
}
// now we can assign func to fa
fa = func;
有什么想法吗?
fb
是以下签名的函数指针:
- 该函数有两个参数:
int
和 char*
- 函数returns指向两个
int
数组的指针,其类型为int(*)[2]
通常,由于函数指针、数组指针等的隐晦语法,您应该使用 typedef 或类型别名(新的 using
-syntax)逐步使其更清晰:
using int2 = int[2];
using int2ptr = int2*;
using fb = int2ptr(int, char*);
此外,您可以考虑返回 std::vector
或 std::array
,而不是返回数组;您可以考虑 std::string
而不是传递 char 指针,您可以考虑 std::function
而不是使用函数指针。这些都是"coulds",因为每个"raw type"都有它存在的理由,但理由很有限
我的同事刚刚发来一个回复:
int (*(*fb)(int, char*))[2];
int(*(returnArray(int, char*)))[2]
{
static int tab[2];
return &tab;
}
// finally we have it
fb = returnArray;
我不知道谁可以使用它以及用于什么目的
它是一个指向函数指针的定义,它有两个参数,一个是 int
类型,另一个是 char *
类型,returns 指向 [=14] 类型数组的指针=].
这是一个简化的演示程序。我只将第二个参数更改为类型 const char *
#include <iostream>
int(*f( int x, const char *s ))[2]
{
static int a[2] = { x, *s };
return &a;
}
int main()
{
int (*(*fb)(int, const char*))[2] = f;
auto p = fb( 10, "A" );
std::cout << ( *p )[0] << '\t' << ( char )( *p )[1] << std::endl;
return 0;
}
输出为
10 A
今天在一次C++面试中看到一句话:
int (*(*fb)(int, char*))[2];
我不知道这个声明是什么意思。它看起来很像函数指针,但第一个星号和方括号破坏了一切。
Visual Studio 解码 fb
的类型如下 int[2] * (int, char *) *
,看起来还是有点神秘。
如果我们简化声明,那么一切看起来都很清楚
int(*(*fa)(int, char*));
int* func(int, char*)
{
return 0;
}
// now we can assign func to fa
fa = func;
有什么想法吗?
fb
是以下签名的函数指针:
- 该函数有两个参数:
int
和char*
- 函数returns指向两个
int
数组的指针,其类型为int(*)[2]
通常,由于函数指针、数组指针等的隐晦语法,您应该使用 typedef 或类型别名(新的 using
-syntax)逐步使其更清晰:
using int2 = int[2];
using int2ptr = int2*;
using fb = int2ptr(int, char*);
此外,您可以考虑返回 std::vector
或 std::array
,而不是返回数组;您可以考虑 std::string
而不是传递 char 指针,您可以考虑 std::function
而不是使用函数指针。这些都是"coulds",因为每个"raw type"都有它存在的理由,但理由很有限
我的同事刚刚发来一个回复:
int (*(*fb)(int, char*))[2];
int(*(returnArray(int, char*)))[2]
{
static int tab[2];
return &tab;
}
// finally we have it
fb = returnArray;
我不知道谁可以使用它以及用于什么目的
它是一个指向函数指针的定义,它有两个参数,一个是 int
类型,另一个是 char *
类型,returns 指向 [=14] 类型数组的指针=].
这是一个简化的演示程序。我只将第二个参数更改为类型 const char *
#include <iostream>
int(*f( int x, const char *s ))[2]
{
static int a[2] = { x, *s };
return &a;
}
int main()
{
int (*(*fb)(int, const char*))[2] = f;
auto p = fb( 10, "A" );
std::cout << ( *p )[0] << '\t' << ( char )( *p )[1] << std::endl;
return 0;
}
输出为
10 A