为何const int*与const int(*)[10]不兼容?代码报错求解
你的C++代码无法运行的原因及修正方案
核心问题是函数参数类型和你传递的变量类型不匹配。
你定义的printArray函数参数是const int(*array)[10],这确实是指向包含10个const int元素的数组的指针(简称数组指针),但你传递的两个变量arr和ptrArr的类型都和它不兼容:
- 直接传
arr时:数组名arr在大多数表达式中会隐式退化为指向数组首元素的指针,也就是const int*类型,而不是指向整个数组的指针const int(*)[10],类型不匹配导致编译失败。 - 传
ptrArr时:ptrArr本身就是const int*类型(指向单个const int的指针),和函数要求的数组指针类型依然不匹配,自然还是报错。
正确的调用方式
要传递符合函数参数要求的指针,你需要获取整个数组的地址,也就是用&arr:
#include <iostream> using namespace std; void printArray(const int(*array)[10]) { // 打印整个数组的字节大小:10 * sizeof(int) cout << sizeof(*array) << endl; // 打印指针本身的大小(32位系统为4,64位系统为8) cout << sizeof(array) << endl; } int main() { const int arr[10] = { 1, 2 }; printArray(&arr); // 传递指向整个数组的指针,类型完全匹配 }
补充说明
- 数组指针
const int(*)[10]和指向首元素的指针const int*是完全不同的类型,无法隐式转换。 - 只有保留数组的类型信息(比如通过数组指针),才能通过
sizeof获取整个数组的字节大小;如果用指向首元素的指针,sizeof只能得到指针本身的大小。
内容的提问来源于stack exchange,提问作者SAQ
相关产品推荐
相关产品推荐

