int* const* foo(int x);是一个有效的 C 函数原型。你如何"read"这个return类型?

int* const* foo(int x); is a valid C function prototype. How do you "read" this return type?

我在阅读 Jeff Lee 于 1985 年发布的 ANSI C 语法规范时注意到这是一个有效的原型,并且我使用此签名编译了一个函数。这个原型 return 的功能到底是什么?这个函数的简单主体是什么样的?

return类型是指向const的指针,指向int。从右到左阅读声明,这会使事情变得容易得多。我最喜欢的复杂指针声明教程: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
}

foo 是一个接受 int 参数和 returns 指向 const 指向 int.[=14= 的指针的函数]