如何访问C中结构中索引处的元素?

如何访问C中结构中索引处的元素?,c,arrays,pointers,data-structures,C,Arrays,Pointers,Data Structures,当您有一个包含数组和数组长度的结构时,如何访问数组的特定索引 我将我的结构定义为: struct intqq { int a[0]; int len; }; 那么如何访问结构中数组中的特定元素呢?处理此问题的常规方法是将数组和长度彼此分开,并将它们传递给需要它们的任何函数。这还使您可以自由地使用静态大小或通过malloc动态声明数组。要使此零长度数组正常工作,您需要将数组作为结构的最后一个成员,而不是第一个成员。然后应该能够像往常一样访问索引 #包括 #包括 int main

当您有一个包含数组和数组长度的结构时,如何访问数组的特定索引

我将我的结构定义为:

struct intqq {
    int a[0];
    int len;
};

那么如何访问结构中数组中的特定元素呢?

处理此问题的常规方法是将数组和长度彼此分开,并将它们传递给需要它们的任何函数。这还使您可以自由地使用静态大小或通过malloc动态声明数组。

要使此零长度数组正常工作,您需要将数组作为结构的最后一个成员,而不是第一个成员。然后应该能够像往常一样访问索引

#包括
#包括
int main()
{
类型定义结构{
int x;
int y[];
}弹性;
int len=10;
flex*f1=malloc(sizeof(flex)+sizeof(int)*len);
f1->x=len;
f1->y[0]=1;
f1->y[1]=2;
printf(“y[1]=%d\n”,f1->y[1]);
}

是否需要在C中执行此操作?在C++中使用STL要更安全(更安全)。是的,我正在用C来处理这个特定的问题。你需要把数组放在结构的末尾。我认为你的问题的原始版本比这个更清楚地显示了你的问题。一个零长度数组是C中未定义的行为。编译器应该抱怨。如果是gcc(它接受此扩展),则启用警告并使用
-std=c11
c99
。然后阅读有关灵活数组成员的内容。即使我这样做了,我也会遇到一系列编译错误。您可以复制用于编译的命令以及错误消息吗?您使用的编译器是什么?声明
flex f1实际上没有在flexible数组成员中分配任何空间。是的,我的错-现在看起来怎么样?
#include <stdio.h>
#include <stdlib.h>

int main()
{
    typedef struct {
        int x;
        int y[];
    } flex;

    int len = 10;
    flex *f1 = malloc( sizeof( flex ) + sizeof( int ) * len );

    f1->x = len;
    f1->y[0] = 1;
    f1->y[1] = 2;
    printf ( "y[1] = %d\n", f1->y[1] );
}