【发布时间】:2021-12-08 22:27:10
【问题描述】:
我刚刚在旧编译器 (ColdFire 5703 MCCCF) 上遇到了一个奇怪的错误,我想确认我正确理解了与指向 const 和 const 数组的指针相关的 C 标准(假设在 C99 中,即使此编译器较旧)。
假设我有这个功能:
void func(const unsigned char *cst_ptr);
和数组:
const unsigned char array[xx] = {...};
所以array 是一个数组,其中每个元素都是const。
如果我这样做:
func(array)
那么array 等价于&array[0],因此传入参数的对象是const unsigned char * 类型,因此尊重函数的原型。
对吗?
【问题讨论】:
-
在几乎所有用例中,
array衰减为指向其第一个元素的指针。因此,无论何时(除了少数例外)您使用array,您都在使用const unsigned char *。所以你的代码是正确的,但不是因为你的原因。 -
你有什么错误?
-
只有
&arr,sizeof arr和_Alignof arr的行为不同。在所有其他上下文中,指针和数组是等价的 -
@0___________ 错误,例如“指向 const 的指针变得不受限制”,但我没有可用的确切句子。我的问题更笼统,关于 const 数组和指向 const 的指针之间的区别
-
@mch “不是因为你的原因”是什么意思。我们不是说同样的话吗?