【问题标题】:Const array and pointer to constconst 数组和指向 const 的指针
【发布时间】: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 “不是因为你的原因”是什么意思。我们不是说同样的话吗?

标签: c c99


【解决方案1】:

const unsigned char *cst_ptr 它不是 const 指针,只是指向 const unsigned char 的指针。

当您使用数组作为函数的参数时,数组衰减为指向数组第一个元素的指针。如果数组被声明为具有const unsigned char 元素,它将与您的函数声明匹配。

OT:

const 指针以另一种方式声明:

unsigned char * const const_ptr;

如果你想要 const 指针指向 const 数据:

const unsigned char * const const_ptr;

【讨论】:

  • 是的,这是一个错字,我指的是指向 const 的指针。已编辑
【解决方案2】:

是的,你是对的,作为参数传递的对象的类型是const char *,因为整个var类型被const所关注。所以你会有像cst_ptr = {[B][o][o][M][!]} 这样的东西,未来无法改变。 希望这能回答您的问题。

【讨论】:

  • 什么是cst_ptr = {[B][o][o][M][!]}?
  • 可以是这样的*
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多