c - 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 *
的,因此尊重函数的原型。
这是对的吗 ?
解决方案
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;
推荐阅读
- android - 如何简单地用 RX / Coroutines 替换 android AsyncTask 并返回一个值?
- java - Map-reduce作业java中URL分组的最佳方法是什么
- android - targetSdkVersion 28 ,FCM 通知图标显示为空白黑色,但使用 targetSdkVersion 20 它将显示完美的应用程序图标
- sybase - 如何在sybase ase中做嵌套游标
- php - Laravel REST API 无法从 React Fetch Request 读取输入数据
- python - eval "$(cat config_file | ./print_to_env_variables.py)" 不在函数内工作
- arrays - 存储对象的数组和数组列表有什么区别?
- amazon-web-services - “如何修复”DistributionConfig 中的未知参数:“ETag”,必须是以下之一:CallerReference、别名”
- mysql - 如何避免使用 SQL 触发器插入重复数据
- c++ - 'int right' 编程图形 C++