当你声明一个“指针类型”形式(函数)参数“就像一个const数组”时,const
是什么?
I.e。:如果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及更高版本的标准是相关的)
答案 0 :(得分:0)
首先我要说:
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);
它将指向数组的第一个元素
答案 1 :(得分:0)
对于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
被丢弃以便确定功能类型。即以这种方式不同的两个函数声明表示相同的函数。
答案 2 :(得分:0)
T * const arr
表示arr
不应更改
const T * arr
表示不应更改*arr
const T * const arr
表示不应更改arr
和*arr
。
那么arr
中的void f(const T arr[]);
是什么?
它就像上面的其中之一3.在鼠标悬停在下面之前做出选择。
void f(const T *arr);
如何解密C / C ++标准以找到这些等价物?
多次阅读标准会有所帮助。给定实例的有用网站是C gibberish ↔ English
// declare f as function (pointer to const int) returning void
void f(const int *);
C和C ++之间以及标准的不同版本之间是否存在差异?
是的,当然,因为C / C ++是不同的语言。 C ++有引用变量。早期的C没有const
等等。