You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:07:42