首页 > 解决方案 > const 数组和指向 const 的指针

问题描述

我刚刚在旧编译器(ColdFire 5703 MCCCF)上遇到了一个奇怪的错误,我想确认我正确理解了相对于指向 const 和 const 数组的指针的 C 标准(假设在 C99 中,即使这个编译器较旧)。

说我有这个功能:

void func(const unsigned char *cst_ptr);

和数组:

const unsigned char array[xx] = {...};

array每个元素都是 的数组也是如此const

然后,如果我这样做:

func(array)

thenarray等价于&array[0]所以传入参数的对象是类型const unsigned char *的,因此尊重函数的原型。

这是对的吗 ?

标签: cc99

解决方案


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

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

旧时:

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

unsigned char * const const_ptr;

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

const unsigned char * const const_ptr;

推荐阅读