【问题标题】:How to use structs in C/C++?如何在 C/C++ 中使用结构?
【发布时间】:2021-04-23 10:31:10
【问题描述】:

以下是我的代码,我遇到了一些错误。有人可以帮我理解这些错误吗?

结构列表:

struct List{
    int size;
    int arr[]; 
};

附加功能:

int [] append(struct List a2, int a) {
    int size = a2.size + sizeof(int);
    int p [size]; //= (int *)malloc(size);
    for(int i = 0; i < size; i++ ){
        p[i] = a2.arr[i];
        if (i > a2.size){
            p[i] = a;
        }   
    }
    return p;
}

主要功能:

int main(){
    int arr[] = {12,313,13,214,23};
    struct List a = {sizeof(arr)/sizeof(int), arr};
    int narr [] = append(a, 50);
    printf("%d\n" , sizeof(arr));   
}

我得到的错误是:

  • "parentheses missing before [ "
  • "int [] append(struct List a2, int a)"
  • implicit function used in "int narr [] = append(a, 50)"

【问题讨论】:

  • 您能否提供您在问题中遇到的错误,以便人们了解该问题?还要尝试描述您正在尝试做或完成的事情。
  • 一些适当的格式也会很棒。
  • 我得到“[之前的括号丢失”这里“int [] append(struct List a2, int a)”和“int narr [] = append(a, 50)”中使用的隐式函数这一行。
  • 欢迎来到 Stack Overflow。请阅读the formatting help page,了解如何正确格式化代码(在当前状态下无法使用)。还请用正确的标签标记问题,例如c++ -- 这对于提请注意这个问题非常重要,以供将来参考。另请记住,您可以随时edit 来增强您的问题,考虑查看tour 和问题指南here 以帮助增强您的问题。

标签: c++ c function struct


【解决方案1】:

您的大部分问题都源于List 结构:

struct List {
    int size;
    int arr[]; 
};

int arr[]; 行创建了一个“可变长度数组”。您在这里将其与“动态数组”混淆了。可变长度数组只是抽象为结构的一部分的字节轨迹。

您的 append 函数不起作用,因为您不能从函数返回数组,更不用说变长数组了。您还可以写入未启动的内存。

要使用变长数组,首先在堆上分配它。这里我们用 4 个元素分配它。

struct List* list = malloc(sizeof(*list) + 4 * sizeof(int));
list->size = 4;
list->arr[0] = 2;
list->arr[1] = 3;
list->arr[2] = 5;
list->arr[3] = 7;

要将元素附加到数组中,我们必须使用realloc

list = realloc(list, sizeof(*list) + 5 * sizeof(int));
list->arr[4] = 11;

在你的程序结束时,确保free(list)

【讨论】:

    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 2014-10-07
    • 2011-10-28
    • 2019-06-05
    • 2014-11-28
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多