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

如何修复创建指针数组时出现的invalid initializer错误?

问题分析与解决

你的代码报错核心原因是类型不匹配:

  • int *p[10] 定义的是由10个int类型指针组成的数组,每个元素必须是int*类型的值。
  • 而&myarr的类型是int (*)[10](指向包含10个int元素的数组的指针),和int*类型完全不兼容,因此编译器抛出"invalid initializer"错误。

两种正确写法

写法1:创建指针数组,每个元素指向myarr的对应元素

如果你确实需要一个指针数组,让每个指针指向myarr里的单个元素,可以这样写:

int myarr[10];
// 手动初始化每个指针指向数组对应位置的元素
int *p[10] = {&myarr[0], &myarr[1], &myarr[2], &myarr[3], &myarr[4],
              &myarr[5], &myarr[6], &myarr[7], &myarr[8], &myarr[9]};

如果使用C99及以后的标准,也可以用循环简化初始化流程:

int myarr[10];
int *p[10];
for (int i = 0; i < 10; i++) {
    p[i] = &myarr[i];
}

写法2:定义指向整个数组的指针(而非指针数组)

如果你实际需求是定义一个指向整个myarr数组的指针,需要修正变量的类型声明:

int myarr[10];
// p是指向包含10个int元素的数组的指针,类型与&myarr完全匹配
int (*p)[10] = &myarr;

这里的括号是关键,(*p)确保p是指针类型,而非数组类型。

内容的提问来源于stack exchange,提问作者A.G.Progm.Enthusiast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:30