当您声明"pointer type"形式(函数)参数"like an const array"时,什么是常量?

What is const when you declare a "pointer type" formal (function) parameter "like an const array"?

本文关键字:array const an 什么 常量 like 参数 pointer 声明 type 形式      更新时间:2023-10-16

当你声明一个"指针类型"的形式(函数)参数"像一个常量数组"时,const是什么?

即:如果 T 是类型标识符,则为:

void f(const T arr[]);

相当于:

void f(const T * const arr);

void f(const T * arr);

void f(T * const arr);

如何解密C/C++标准以找到此等价物? :-)

C和C++之间以及标准的不同版本之间在上述声明的含义方面是否存在差异?(对于 C - ANSI C89 及更高版本的标准是相关的)

首先我应该说:

void f(int const* p);

void f(const int* p);

具有相同的含义,这意味着它是指向您无法更改的值的指针。

有一种方法可以声明指针:

void f(int* const p);

它意味着常量指针,你不能把它分配给另一个地址。

至于你的问题,下面的代码

void f(const T arr[]);

将转换为

void f(const T* arr);

它将是指向数组第一个元素的指针

T * const arr表示arr不应该改变。
const T * arr意味着*arr不应该改变。
const T * const arr意味着arr*arr都不应该改变。

那么哪个像void f(const T arr[]);中的arr
它就像上述 3 种之一。 在将鼠标悬停在以下内容上之前进行选择。

<块引用类>

void f(const T *arr);


如何解密C/C++标准以找到这些等价物?

多次阅读标准会有所帮助。 给定实例的有用站点是 C 乱码↔英语

// declare f as function (pointer to const int) returning void
void f(const int *);

C和C++之间以及标准的不同版本之间是否存在差异?

是的,当然,因为C/C++是不同的语言。 C++具有引用变量。 早期的C没有const等。

对于C++(目前问题也被标记为 C):

这里涉及三种不同的等价性。[1] const T arr[]形式参数类型衰减为T const* arr,因此在形式参数类型的上下文中是等价的。[2] T const* arr等价于const T* arr,这是另一种表达相同的语法。[3] 在函数类型的上下文中,T const* arr中的形式参数类型等价于T const* const arr,因为为了确定函数类型,顶级const被丢弃了。即,以这种方式不同的两个函数声明表示相同的函数。