如何访问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] );
}