C中的嵌套数组结构

时间:2013-11-15 18:21:04

标签: structure

以下是它给我和我的代码的错误:

workspace.c:在函数'main'中:

workspace.c:38:错误:下标值既不是数组也不是指针

workspace.c:39:错误:下标值既不是数组也不是指针

任何输入都将不胜感激!谢谢你的时间。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <dirent.h>
#include <sys/time.h>
#include <fcntl.h>

#define n 4
struct process
{
    struct segment{

        struct page
        {
            int pid;
            int p[4];
        }pages;
    }segments;
};

struct process processes[3];
struct page pages[n];
struct segment segments[n];

int main()
{
    int a, b, c;
    int k = 0;
     for(a = 0; a < 3; a++)
     {
            for(b = 0; b < 4; b++)
        {
            for(c = 0; c < 4; c++)
            {
                k++;
                processes[a].segments[b].pages[c].pid = k;
                printf("Segment: %d, Page: %d, PID: %d\n",a,b,processes[a].segments[b].pages[c].pid);
            }
        }

 }

return 0;
}

2 个答案:

答案 0 :(得分:1)

请参阅此代码:Tested with no error

#define n 4
struct process
{
    struct segment{

        struct page
        {
            int pid;
            int p[4];
        }pages[n];
    }segments[n];
}processes[3];


int main()
{
    int a, b, c;
    int k = 0;
     for(a = 0; a < 3; a++)
     {
        for(b = 0; b < 4; b++)
        {
            for(c = 0; c < 4; c++)
            {
                k++;
                processes[a].segments[b].pages[c].pid = k;
                printf("Segment: %d, Page: %d, PID: %d\n",a,b,processes[a].segments[b].pages[c].pid);
            }
        }

     }

    return 0;
}

答案 1 :(得分:0)

您的segments元素仅显示为单个结构。你的图表(以及你似乎打算使用它的方式)表明它应该是它们的数组,如:

struct process
{
    struct segment{

        struct page
        {
            int pid;
            int p[4];
        }pages;
    }segments[4];   // <-------- [4]
};

你也宣布:

struct page pages[n];
struct segment segments[n];

你从未真正使用过......你(理所当然,我认为)在你的过程结构中使用他们的亲属。 (这也意味着你有效地忽略了#define n)