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

C语言中如何通过pointer++遍历结构体数组?

问题分析与解决

你的问题出在指针类型不匹配上:

  • struct1是结构体数组名,它会隐式转换为指向数组第一个元素的指针,类型是STRUCT *。
  • 而&struct1是指向整个数组的指针,类型是STRUCT (*)[30],和你定义的STRUCT *pointer类型不兼容。这种情况下pointer++的步长会是整个数组的大小,自然无法跳转到下一个结构体。

修正方法

把指针赋值改成以下两种正确方式之一:

  • pointer = struct1; (利用数组名的隐式转换,直接指向首元素)
  • pointer = &struct1[0]; (显式取第一个元素的地址,和上面完全等价)

这样pointer的类型就正确了,执行pointer++时,指针会自动偏移一个STRUCT结构体的字节数,正好指向数组的下一个元素。

完整示例代码

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

typedef struct STRUCTURE{
    char name[30];
}STRUCT;

int main(void){
    STRUCT struct1[30];
    STRUCT *pointer;
    // 正确赋值指针
    pointer = struct1;

    // 示例:遍历前5个结构体并赋值
    for(int i = 0; i < 5; i++){
        sprintf(pointer->name, "结构体%d", i+1);
        printf("%s 的地址:%p\n", pointer->name, pointer);
        pointer++; // 正确跳转到下一个结构体
    }

    return 0;
}

额外说明

如果你非要使用指向整个数组的指针(比如STRUCT (*p)[30] = &struct1;),那么访问元素需要用(*p)[i],但p++会直接跳过整个30个结构体的数组,这显然不符合你遍历单个元素的需求,因此不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:02:28