【问题标题】:Creating a Static Structure which array use different data types创建一个使用不同数据类型的数组的静态结构
【发布时间】:2021-05-25 22:21:37
【问题描述】:

我正在创建一个这样的结构:


typedef struct stat{
    char name[50], type[50];
    double x, y, lar, alt;
    
} info;

typedef struct list{
    int prim, livre;
    info A[];
    
} LS;

int main(){
    int n;
    scanf("%i", &n);
    LS *mylist = malloc(sizeof(LS) + n);
    
    mylist->info->A[3] = 1.5;
    printf("%lf", mylist->info->A[3]);

    return 0;
}

我知道可以在结构中创建灵活的数组类型,但是我不知道如何访问数组以使用它。我应该如何做到这一点以及它如何适用于字符串?

我想使用一个数组(其大小将由用户输入定义),在其中我将存储一个结构,其名称、类型、x、y、lar、alt 在位置 A[0],另一个在位置 A[1] 等等。

【问题讨论】:

  • 请记住,您传递给malloc 的大小是以字节 为单位的大小。当你在调用中添加n时,你只添加n字节用于分配,但你想添加n * sizeof(info)字节:malloc(sizeof(LS) + (n * sizeof(info))

标签: c list struct


【解决方案1】:

您可以像访问任何其他结构成员一样访问flexible array member

在您的情况下,您以mylist->A 访问它,数组的每个单独元素都以info->A[i] 访问(对于i 的有效值)。

那么由于数组的每个元素都是一个结构对象使用普通的点符号.来访问数组中结构的成员:

mylist->A[3].x = 1.5;
printf("%f\n", mylist->A[3].x);

【讨论】:

  • 字符串呢?试图将“x”更改为“name”并返回赋值给数组类型的表达式
  • @FelipeWatanabe:在 C 中,字符串只是 以空字符结尾的字符数组,本质上是数组。您不能分配给字符串,但必须使用strcpy(或strncpy)复制到其中。
  • @FelipeWatanabe 那是因为你不能分配给数组,灵活的数组成员不是问题。如果你有一个“字符串”,你需要复制到它:strcpy(mylist->A[3].name, "foobar")
猜你喜欢
  • 2015-11-30
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 2022-11-27
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多