在函数内部扩展C数组

鲤鱼

这在主要方面起作用,但是在放入函数时会中断。我不确定传递给函数后如何重新分配指针。

void expandArray(int** arr[], int* size) {
    int *temp;
    *temp = *arr;

    *arr = (int*) malloc(*size * 2 * sizeof(int));

    for (int i = 0; i < *size; i++) {
        printf("assigning from temp: %d ", temp[i]);
        arr[i] = temp[i];
        printf("to arr: %d \n", arr[i]);
    }

    *size = *size * 2;
    free(temp);
}

main(){
    int *arr;
    arr = (int*) malloc(maxSize * sizeof(int));
    if ....
        expandArray(arr, &arrSize);
    // use bigger arr for other stuff
}
埃里克·波斯蒂奇(Eric Postpischil)

在中mainarr声明为int *arrmain调用expandArray,它应该通过一个指针arr,写的是&arr,有型int **a

但是,您将参数声明expandArrayint **arr[],添加了方括号。这些都是不必要的,并且可以更改类型,并且您的编译器应该已经对此发出警告。注意编译器警告。在继续操作之前,请确保您了解它们并解决它们。

在中expandArray,您可以同时使用arr[i]temp[i]访问该数组。但是,arr[i]这不是访问数组元素的正确方法。arr更正参数的声明后,它将是int **arr,并且将数组的元素引用为不合适arr[i]会的(*arr)[i]

通常,为了减少混淆,作者将使用一个临时变量来保存指针,因此他们不需要多余的星号:

int *NewArray = malloc(...); // Get new space.
*arr = NewArray;             // Send new address to caller.
...
   NewArray[i] = temp[i];    // Use temporary variable for access.

其他一些要点:

  • 调用时malloc,请使用,而不是,将指针分配到了sizeof *p哪里这样比较好,因为如果以后要更改其类型,则只需在其声明中进行更改,而不必在中进行更改这样一来,在一个地方而不是另一个地方进行更改的可能性就很小。psizeof(int)psizeof
  • 不要转换的结果malloc尽管在C ++中是必需的,但这在C中是不必要的。
  • main应声明为int main(void)int main(int argc, char *argv[]),而不应声明main()(C实现也可以提供其他形式。)
  • 使用size_t数组的大小,而不是int和两种size_tptrdiff_t数组的索引。

总体而言,代码可能是:

#include <stdio.h>
#include <stdlib.h>


void expandArray(int **arr, int *size)
{
    //  Record old pointer and size in temporary variables for convenience.
    int   *OldArray = arr;
    size_t OldSize  = *size;

    //  Prepare new size and pointer.
    size_t NewSize  = 2 * OldSize;
    int   *NewArray = malloc(NewSize * sizeof *NewArray);

    //  Handle allocation failure.
    if (!NewArray)
    {
        fprintf(stderr, "Error, unable to allocate memory.\n");
        exit(EXIT_FAILURE);
    }

    //  Copy data from old array to new array.
    for (size_t i = 0; i < OldSize; ++i)
        NewArray[i] = OldArray[i];

    //  Send new size and pointer to caller.
    *size = NewSize;
    *arr  = NewArray;

    //  Release old memory.
    free(OldArray);
}


int main(void)
{
    int *arr;
    arr = malloc(InitialSize * sizeof *arr);
    if (...)
        expandArray(&arr, &arrSize);
    // use bigger arr for other stuff
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:函数扩展数组

来自分类Dev

C ++:函数扩展数组

来自分类Dev

python:在函数内部扩展一个numpy数组

来自分类Dev

在C中更改数组内部函数

来自分类Dev

C ++在函数内部分配动态数组

来自分类Dev

在C中的函数内部修改char数组

来自分类Dev

C++ 从带有指针数组的函数内部调用函数

来自分类Dev

函数内部的数组声明

来自分类Dev

返回对向量或文本数组的 PostgreSQL C 扩展函数

来自分类Dev

C-如何在函数内部修改指针数组

来自分类Dev

C编程:初始化函数内部的char数组的指针

来自分类Dev

C ++:如何在构造函数内部创建接口数组

来自分类Dev

填充在 .h 中声明的结构数组,在 .c 中的函数内部

来自分类Dev

从函数内部将数组作为函数参数传递,该数组将其作为C中的参数

来自分类Dev

函数内部的数组变量会影响c中函数外部的数组变量

来自分类Dev

函数内部的数组变量会影响c中函数外部的数组变量

来自分类Dev

将 str 作为 int 数组传递给 Python C 扩展函数(使用 SWIG 扩展)

来自分类Dev

突变JavaScript数组内部函数

来自分类Dev

向量到函数内部的数组

来自分类Dev

函数内部声明的数组是静态的?

来自分类Dev

在C函数内部声明函数

来自分类Dev

在 C 中没有全局变量或更改函数输入的函数内部数组的变量分配

来自分类Dev

C ++:使用boost :: hana将数组元素扩展为函数的参数

来自分类Dev

非扩展分配函数创建的char数组

来自分类Dev

扩展图像的Python函数(NumPy数组)

来自分类Dev

扩展Swift数组以复制indexOfObject函数

来自分类Dev

获取C / C ++函数内部的函数地址?

来自分类Dev

如何从c扩展内部执行select语句

来自分类Dev

如何在C ++中将多维数组传递给没有内部维的函数?

Related 相关文章

  1. 1

    C ++:函数扩展数组

  2. 2

    C ++:函数扩展数组

  3. 3

    python:在函数内部扩展一个numpy数组

  4. 4

    在C中更改数组内部函数

  5. 5

    C ++在函数内部分配动态数组

  6. 6

    在C中的函数内部修改char数组

  7. 7

    C++ 从带有指针数组的函数内部调用函数

  8. 8

    函数内部的数组声明

  9. 9

    返回对向量或文本数组的 PostgreSQL C 扩展函数

  10. 10

    C-如何在函数内部修改指针数组

  11. 11

    C编程:初始化函数内部的char数组的指针

  12. 12

    C ++:如何在构造函数内部创建接口数组

  13. 13

    填充在 .h 中声明的结构数组,在 .c 中的函数内部

  14. 14

    从函数内部将数组作为函数参数传递,该数组将其作为C中的参数

  15. 15

    函数内部的数组变量会影响c中函数外部的数组变量

  16. 16

    函数内部的数组变量会影响c中函数外部的数组变量

  17. 17

    将 str 作为 int 数组传递给 Python C 扩展函数(使用 SWIG 扩展)

  18. 18

    突变JavaScript数组内部函数

  19. 19

    向量到函数内部的数组

  20. 20

    函数内部声明的数组是静态的?

  21. 21

    在C函数内部声明函数

  22. 22

    在 C 中没有全局变量或更改函数输入的函数内部数组的变量分配

  23. 23

    C ++:使用boost :: hana将数组元素扩展为函数的参数

  24. 24

    非扩展分配函数创建的char数组

  25. 25

    扩展图像的Python函数(NumPy数组)

  26. 26

    扩展Swift数组以复制indexOfObject函数

  27. 27

    获取C / C ++函数内部的函数地址?

  28. 28

    如何从c扩展内部执行select语句

  29. 29

    如何在C ++中将多维数组传递给没有内部维的函数?

热门标签

归档