提问人:jk. 提问时间:6/28/2022 最后编辑:Vlad from Moscowjk. 更新时间:6/28/2022 访问量:126
如何在c语言中创建n大小的用户定义数组结构
How to create user define array structure of n size in c language
问:
我想创建一个“n”大小的数组结构,但我不知道该怎么做。我总是像这样创建静态
typedef struct
{
int id;
char name[25];
char dob[11];
}info;
info student[5];
在这里,我想要它 info student[n],但它不起作用,因为它只需要整数。
答:
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 是一种合理的方法,不会向初学者展示不好的做法,我肯定会重新考虑。未能检查 的返回值几乎被否决!scanf
argv
n
scanf
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。
评论
info *student = malloc(n * sizeof *student);