在C中定义动态只读数组

时间:2017-11-25 09:07:10

标签: c dynamic allocation

如何在C中定义动态只读整数数组?

我知道我们可以使用限定符来分配静态只读数组,' const'并且'静态'但是在动态数组的情况下如何做同样的事情呢?

2 个答案:

答案 0 :(得分:3)

您可以使用const限定符指向已创建的非const数组:

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

int *alloc(int n)
{
    int *arr = malloc(n * sizeof(*arr));

    for (int i = 0; i < n; i++) {
        arr[i] = i;
    }
    return arr;
}

int main(void)
{
    const int *arr = alloc(5);

    arr[3] = 5; /* error */
    return 0;
}

答案 1 :(得分:2)

定义动态分配的内存没有任何标准方法const。由于您不能将calloc以外的动态分配内存初始化用于初始化为零,因此没有多大意义。 C根本没有任何标准库函数用于将内存初始化为其他任何内容。它要求您使用赋值,而const永远不会使用赋值。

您可以将指向动态分配的内存的指针声明为const,但是如果您这样做,则允许用户(就语言标准而言)抛弃const并修改数据无论如何。

理论上可能不够好,但在实践中却是如此。抛弃const来修改数据的代码,特别是以调用者不清楚的方式,是非常罕见的。