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

如何为已声明的指向int指针数组的指针正确赋值?

正确赋值写法

直接对指针变量p赋值即可:

p = &arr;

原写法报错的原因

你尝试的(*p)[] = &arr;完全不符合C语法规则:

  • 带空方括号的(*p)[]写法仅能用于变量声明场景,不能出现在赋值语句的左值位置
  • 你需要修改的是指针变量p本身的指向,p的类型是「指向int*类型数组的指针」,和&arr(arr数组的地址,类型为指向长度为3的int*数组的指针)完全兼容,可以直接赋值。

完整可运行示例

#include <stdio.h>

int main() {
    int *arr[3];
    int a = 1, b = 2, c = 3;
    // 给arr数组元素赋值
    arr[0] = &a;
    arr[1] = &b;
    arr[2] = &c;

    // 先声明指针
    int *(*p)[];
    // 直接赋值
    p = &arr;

    // 验证取值正常
    printf("%d\n", *(*p)[0]); // 输出 1
    printf("%d\n", *(*p)[1]); // 输出 2
    printf("%d\n", *(*p)[2]); // 输出 3

    return 0;
}

可选优化

如果要避免部分编译器报「指向不完整数组类型的指针」相关警告,可以在声明指针时明确指定数组长度,赋值逻辑不变:

// 声明时指定数组长度,和arr的长度匹配
int *(*p)[3];
p = &arr;

内容的提问来源于stack exchange,提问作者Catherine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:05