如何在c语言中创建n大小的用户定义数组结构

How to create user define array structure of n size in c language

提问人:jk. 提问时间:6/28/2022 最后编辑:Vlad from Moscowjk. 更新时间:6/28/2022 访问量:126

问:

我想创建一个“n”大小的数组结构,但我不知道该怎么做。我总是像这样创建静态

typedef struct
{
  int id;
  char name[25];
  char dob[11];
}info;
info student[5];

在这里,我想要它 info student[n],但它不起作用,因为它只需要整数。

c struct 声明 可变长度数组 存储持续时间

评论

1赞 Weather Vane 6/28/2022
如果不能使用可变长度数组,则info *student = malloc(n * sizeof *student);
1赞 Gerhardh 6/28/2022
欢迎来到 SO。“它只需要整数”是没有意义的。它只需要一个常量表达式,即“编译时常量表达式”。
1赞 Gerhardh 6/28/2022
可变长度数组只能在函数中使用,不能在文件作用域中使用。通常,最好按照 Weather Vane 的建议使用动态内存分配
0赞 jk. 6/28/2022
我不贪婪,但你能解释一下并举个例子吗?

答:

1赞 Vlad from Moscow 6/28/2022 #1

看来你的意思是以下代码

typedef struct
{
  int id;
  char name[25];
  char dob[11];
}info;
info student[n];

其中 n 是某个整数类型的变量。

数组的此声明声明了一个可变长度的数组。可变长度数组可能只有自动存储持续时间。因此,您可以在函数中声明这样的数组,例如

typedef struct
{
  int id;
  char name[25];
  char dob[11];
}info;

int main( void )
{
    size_t n;

    printf( "Enter the array size: " );
    scanf( "%zu", &n );

    info student[n];
    //...
}

不能在文件作用域中声明可变长度数组。

请注意,变量的值应为正数。另一个特点是,您不能在其声明中初始化可变长度数组的元素。n

如果你的编译器不支持可变长度数组,那么你需要动态分配一个结构数组,例如

typedef struct
{
  int id;
  char name[25];
  char dob[11];
}info;

int main( void )
{
    size_t n;

    printf( "Enter the array size: " );
    scanf( "%zu", &n );

    info *student = malloc( n * sizeof( *student ) );
    //...
}

评论

0赞 William Pursell 6/28/2022
我非常接近投票,但不能,因为演示了要获取应该来自 .Get 是一种合理的方法,不会向初学者展示不好的做法,我肯定会重新考虑。未能检查 的返回值几乎被否决!scanfargvnscanf
0赞 Vlad from Moscow 6/28/2022
@WilliamPursell 它只是数组声明或其分配的演示。其他细节被省略:)
0赞 jk. 6/28/2022
我有疑问什么是“%zu”和size_t因为我知道 %u、%p。
0赞 Vlad from Moscow 6/28/2022
@jk。例如,运算符 sizeof 生成无符号整数类型的值 size_t。例如,如果你将编写 printf( “sizeof( int ) = %zu\n”, sizeof( int ) );则表达式 sizeof( int ) 的类型为 size_t。若要输出此类型的值,必须使用转换说明符 zu。