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

C语言结构体数组指针打印随机数问题及取值打印方案问询

问题解决:数组指针打印元素值的正确方式

问题根源

你的Stack结构体里,Arr是指向长度为10的int数组的指针(int (*Arr)[10]),而你在print_Stack里直接写pilha->Arr[x],这会触发错误的指针算术:

  • C语言中pilha->Arr[x]等价于*(pilha->Arr + x),这里的+x是按int[10]的大小偏移(假设int占4字节,每次跳40字节),直接越界访问了原数组之外的内存,打印的自然是随机垃圾值。

针对数组指针的解决方案

下面两种写法都能正确打印元素值,本质都是先拿到指向单个int的指针,再解引用:

写法一:先解引用数组指针得到数组,再访问元素

修改print_Stack函数:

void print_Stack(Stack *pilha) {
    for (int x = 0; x < pilha->size; x++) {
        // 先解引用Arr,拿到它指向的int[10]数组,再取第x个元素
        printf("%d ", (*pilha->Arr)[x]);
    }
}

写法二:用指针偏移直接定位元素

如果想更贴近底层指针操作,可以这么写:

void print_Stack(Stack *pilha) {
    for (int x = 0; x < pilha->size; x++) {
        // 先解引用Arr得到数组首元素的指针,再偏移x个int,最后解引用
        printf("%d ", *(*pilha->Arr + x));
    }
}

原理讲解

  1. 类型辨析:int (*Arr)[10]是数组指针,它指向的是一整个长度为10的int数组,而不是单个int。它的大小是一个指针的大小(比如8字节,64位系统),但它的算术运算单位是int[10]的大小。
  2. 正确解引用流程:
    • 第一步:*pilha->Arr——解引用数组指针,得到它指向的int[10]数组,此时数组名会隐式转换为指向数组首元素的int*指针。
    • 第二步:用[x]或者+x对这个int*指针做偏移,就能定位到第x个元素,最后解引用就能拿到元素值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:38:26