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

struct中指向int指针数组的指针如何赋值及访问内部int元素?

修复方案

两个核心错误

  • struct demo *demo_ptr是未初始化的野指针,没有指向有效的内存空间,直接用->访问成员属于非法内存操作,是程序崩溃的主要原因。
  • 元素访问语法错误:demo_ptr->(*p)[i]不符合C语言语法规则,成员访问和解引用的顺序错误。

修正后完整代码

#include <stdio.h>
#include <stdlib.h>

struct demo{
    int *(*p)[];
};
int main() {
    // 优先用栈上的结构体实例,无需手动管理内存
    struct demo d;
    // 如果必须用指针,先分配内存:struct demo *demo_ptr = malloc(sizeof(struct demo));

    int a = 1;
    int b = 2;

    int *arr[2];
    arr[0] = &a;
    arr[1] = &b;

    for (int i = 0; i < 2; i++) {
        printf("num in array = %d\n", *arr[i]);
    }

    // 赋值逻辑本身正确,只要结构体有有效内存即可
    d.p = &arr;
    // 指针写法:demo_ptr->p = &arr;

    for(int i = 0; i < 2; i++){
        // 正确访问写法
        printf("num in array = %d\n", *(*d.p)[i]);
        // 指针写法:*(*(demo_ptr->p))[i]
    }

    // 用malloc分配的指针需要手动释放:free(demo_ptr);
    return 0;
}

操作说明

赋值方法

你原本给p赋值的逻辑是对的,&arr就是int*类型数组的指针,和p的类型完全匹配,只需要保证存储p的struct demo实例有有效的内存空间:

  • 直接在栈上声明struct demo变量,不需要手动分配、释放内存,更安全
  • 如果要使用指针形式,必须先调用malloc分配对应大小的内存,使用完成后调用free释放,避免内存泄漏

元素访问方法

按优先级拆解访问逻辑:

  1. 先拿到结构体里的p成员:d.p(指针形式写demo_ptr->p),此时拿到的是指向int*数组的指针
  2. 对p解引用拿到数组本身:*(d.p),等价于你定义的arr数组
  3. 取下标拿到对应位置的int*指针:(*d.p)[i]
  4. 对int*解引用拿到最终的int值:*(*d.p)[i]

内容的提问来源于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:57:03