使用结构体通过指针操作结构体参数值?

问题描述 投票:0回答:1

希望你做得好。我目前正在尝试开发流程创建程序,并希望获得一些见解。我希望创建一个进程指针数组,并使用一个进程来操纵另一个进程的值。我简化了此示例的 Process 结构。在本例中,arrayP[1] 是 arrayP[0] 的子级,我希望使用 arrayP[1] 的指针将 arrayP[0] 的子级数的值更改为 1。

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


#define MIN_PID 300
#define MAX_PID 5000


typedef struct{
        int numChildren;
        struct Process* parent;
    } Process;

    int main(void)
    { Process *arrayP;
      arrayP=malloc(sizeof(Process)*2);
      
      arrayP[1].parent=&arrayP[0];
      arrayP[1].parent->numChildren = 1;

      free(arrayP);
      return 0;

    }

运行此命令时,我收到错误:“‘struct Process’类型的定义不完整 p2.parent->numChildren = 1;" 我做错了什么还是这是不可能的?

c pointers struct
1个回答
0
投票

在编译器获得 Process 结构的完整定义之前,您正尝试通过指向 arrayP[0] 的指针访问 arrayP[0] 的 numChildren 成员。结构体 Process 在声明 arrayP 变量之后定义。您可以通过将结构定义移至代码中其用法之上来解决此问题。

只需将 Process 结构定义更新为

typedef struct Process {
    int numChildren;
    struct Process* parent;
} Process;
© www.soinside.com 2019 - 2024. All rights reserved.