int * const * foo(int x);是一个有效的C函数原型。你如何阅读"这种退货类型?

时间:2015-06-17 01:49:49

标签: c++ c types grammar

我注意到这是一个有效的原型,同时阅读了Jeff Lee发布的1985年的ANSI C语法规范,并编写了一个带有此签名的函数。这个原型的功能究竟可以返回什么?这个函数的简单主体是什么样的?

2 个答案:

答案 0 :(得分:9)

返回类型是指向int的const指针的指针。从右到左阅读声明,这将使事情变得更容易。我最喜欢的复杂指针声明教程:http://c-faq.com/decl/spiral.anderson.html

一些(相当人为的)例子:

#include <iostream>

int* const * foo(int x)
{
    static int* const p = new int[x]; // const pointer to array of x ints
    for(int i = 0; i < x ; ++i) // initialize it with some values
        p[i] = i; 
    return &p; // return its address
}

int main()
{
    int* const* p = foo(10); // our pointer to const pointer to int
    //*p = nullptr; // illegal, cannot modify the dereferenced pointer (const)
    std::cout << (*p)[8]; // display the 8-th element
}

答案 1 :(得分:1)

foo是一个函数,它接受int参数并返回指向const的{​​{1}}指针的指针。