c - 在函数中初始化数组

标签 c arrays pointers

当我想通过函数初始化一个指向数组的指针时,我正在做以下事情:

通过函数初始化和销毁​​数组:

int initArr(int **b)
{
    int *arr = (int *) malloc(sizeof(int)*2);

    if(arr == NULL)
        return 0;

    *b = arr;
    arr = NULL;
    return 1;
}

void destroyArr(int *b)
{
    free(b); 
    b = NULL;
}

初始化指向数组的指针:

int *pArr;
int initStatus = initArr(&pArr);

if(initStatus == 0)
{
    printf("%s", "error");
    return 0;
}

使用指向数组的指针:

*pArr = 1;
*(pArr + 1) = 2;

printf("0 = %i\n", *pArr);
printf("1 = %i\n", *(pArr + 1));

销毁指向数组的指针:

destroyArr(pArr);
pArr = NULL;

这是正确和安全的吗?

最佳答案

我还没有测试过,但它看起来是正确的。不过,有一点要注意:您不需要将 arrb 设置为 NULL,它们位于作用域的最末端之后无论如何都不能(安全地)访问。

关于c - 在函数中初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870891/

相关文章:

c - 以某种方式显示输出

c - 用 C 中的时序替换打印语句

c - AVL 树平衡 - C

c++ - 指针声明和间接声明之间的区别

c++ - 在基类中存储指向派生类函数的指针

c++ - 扩展填充结构时,为什么不能在尾部填充中放置额外的字段?

java - 为什么我的 java 数组不允许用户输入每个值?

javascript - 为什么下面的原型(prototype)声明不起作用?

javascript - 在对象数组中移动值时出现问题

使用指针更改字符数组的字符